powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Среднемесячные остатки
33 сообщений из 33, показаны все 2 страниц
Среднемесячные остатки
    #39651579
Cursor777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе утро всем. Пусть есть таблица (Table1), которая содержит: A (приход), B(расход) и дату. Есть таблица (Table2), которая содержит номер человека - id и его имя - Name.
Необходимо найти среднемесячный остаток по таблице Table1 для определенного человека из Table2.
Note: Сначала получение остатков за каждый календарный день для каждого человека, затем получение среднего.
Вопрос: в коде я делю на 31 день (например, март), но по сути, не каждый ведь день может быть оборот. Как исключать такие дни?
Подсказали сделать подзапрос в From, но дальше я не могу понять что делать с этим Temp, и как произвести выборку.
Подскажите, опытные.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
SELECT 
        TB2.id, TB2.Name, 
        SUM(B - A) /
                ( SELECT 
                    MAX(LEVEL) AS Count_Days 
                    FROM dual 
                    START WITH :p_BegDate <= :p_EndDate
                    CONNECT BY :p_BegDate + rownum <= :p_EndDate
                )
                AS Balance
    FROM 
        Table1 TB1, Table2 TB2, (SELECT trunc(:p_BegDate + rownum - 1) AS Temp
                                FROM DUAL 
                                START WITH :p_BegDate <= :p_EndDate
                                CONNECT BY :p_BegDate + rownum <= :p_EndDate
                                )
    WHERE 
        TB1.DATE_T >= :p_BegDate AND TB1.DATE_T <= :p_EndDate        
        AND TB2.ID Like '1_' 
        AND TB2.id = TB1.tb2_id 
    GROUP BY TB2.id, TB2.Name
    ORDER BY 3 DESC;
...
Рейтинг: 0 / 0
Среднемесячные остатки
    #39651589
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cursor777 Вопрос: в коде я делю на 31 день (например, март), но по сути, не каждый ведь день может быть оборот. Как исключать такие дни?

Зачем исключать?
Надо на каждый день посчитать остаток, сложить и разделить.
Иначе правильной цифры не получишь.
...
Рейтинг: 0 / 0
Среднемесячные остатки
    #39651600
Cursor777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
982183, возможно не так условие понял. Не подскажите дальнейшие действия исходя из кода?
...
Рейтинг: 0 / 0
Среднемесячные остатки
    #39651663
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
982183Cursor777 Вопрос: в коде я делю на 31 день (например, март), но по сути, не каждый ведь день может быть оборот. Как исключать такие дни?

Зачем исключать?
Надо на каждый день посчитать остаток, сложить и разделить.
И наче правильной цифры не получишь .

получить, но чуть посложнее

.....
stax
...
Рейтинг: 0 / 0
Среднемесячные остатки
    #39651671
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cursor777 Note: Сначала получение остатков за каждый календарный день для каждого человека, затем получение среднего.

двигайтесь последовательно,сначала получите остатки
можно за каждый день (так проще), можно за период когда был оборт (чуть сложнее)
зы
как-то странно у Вас Приход уменьшает остаток и наоборот
зыы
страноватое вычисление
( SELECT
MAX(LEVEL) AS Count_Days
FROM dual
START WITH :p_BegDate <= :p_EndDate
CONNECT BY :p_BegDate + rownum <= :p_EndDate
)
AS Balance
гляньте на :p_EndDate-:p_BegDate +1

.....
stax
...
Рейтинг: 0 / 0
Среднемесячные остатки
    #39651678
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxполучить, но чуть посложнее

ПРАВИЛЬНОЙ не получить.

Ситуация:
1-го числа прошло 100шт.
31-го числа продано 100 шт.

Вариант1 (100+0)/2=50
Вариант1 (100*30+0)/31=96,77
...
Рейтинг: 0 / 0
Среднемесячные остатки
    #39651684
Cursor777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Staxгляньте на :p_EndDate-:p_BegDate +1


Выводит 29 дней в марте.
...
Рейтинг: 0 / 0
Среднемесячные остатки
    #39651686
Cursor777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Staxзы
как-то странно у Вас Приход уменьшает остаток и наоборот
зыы
страноватое вычисление
( SELECT
MAX(LEVEL) AS Count_Days
FROM dual
START WITH :p_BegDate <= :p_EndDate
CONNECT BY :p_BegDate + rownum <= :p_EndDate
)
AS Balance
гляньте на :p_EndDate-:p_BegDate +1

.....
stax

Это просто вычисление количества дней в месяце, беру максимальную дату, т.е 31 день - это и будет делимым.
...
Рейтинг: 0 / 0
Среднемесячные остатки
    #39651698
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
982183Staxполучить, но чуть посложнее

ПРАВИЛЬНОЙ не получить.

Ситуация:
1-го числа прошло 100шт.
31-го числа продано 100 шт.

Вариант1 (100+0)/2=50
Вариант1 (100*30+0)/31=96,77
счітаем
1) что до 1-го оборота не было
2) остаток на конец дня

тогда среднее среднее (100*30+0*1)/31

если я провавильно понимаю "среднемесячный остаток"

.....
stax
...
Рейтинг: 0 / 0
Среднемесячные остатки
    #39651702
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cursor777Это просто вычисление количества дней в месяце, беру максимальную дату, т.е 31 день - это и будет делимым.

Cursor777Staxгляньте на :p_EndDate-:p_BegDate +1


Выводит 29 дней в марте.

31/03/18-01/03/18+1=31дней

.....
stax
...
Рейтинг: 0 / 0
Среднемесячные остатки
    #39651776
Cursor777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[/quot]
двигайтесь последовательно,сначала получите остатки
можно за каждый день (так проще), можно за период когда был оборт (чуть сложнее)
[/quot]

Вывел как Вы и сказали за каждый день. В итоге значение меняется только 14, 22 и 27 числа. Как дальше с этим быть?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT -P_SALDO.GETSALDO('1', '01/03/2018') SALDO FROM DUAL; -- -34050617,86
...
SELECT -P_SALDO.GETSALDO('1', '14/03/2018') SALDO FROM DUAL --меняется : -34516117,86
...
SELECT -P_SALDO.GETSALDO('1', '22/03/2018') SALDO FROM DUAL --меняется : -34649451,19
...
SELECT -P_SALDO.GETSALDO('1', '27/03/2018') SALDO FROM DUAL --меняется : -34666901,19
...
SELECT -P_SALDO.GETSALDO(970692, '01/04/2018') SALDO FROM DUAL;  
...
Рейтинг: 0 / 0
Среднемесячные остатки
    #39651777
Cursor777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cursor777
двигайтесь последовательно,сначала получите остатки
можно за каждый день (так проще), можно за период когда был оборт (чуть сложнее)
[/quot]

SELECT -P_SALDO.GETSALDO('1', '01/04/2018') SALDO FROM DUAL; --была ошибочка с id

[/src][/quot]
...
Рейтинг: 0 / 0
Среднемесячные остатки
    #39651807
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cursor777,

я не умею использовать/создавать функции (GETSALDO) в кляузе with поетому придется создавать таблички

что займет чутку времени

счас нарисую

.....
stax
...
Рейтинг: 0 / 0
Среднемесячные остатки
    #39651820
Cursor777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,
эта функция аналог:
Код: plsql
1.
2.
3.
4.
5.
SELECT SUM(A - B) AS SALDO
    FROM Table1 
    WHERE
        tb2_id = 1 AND  - id человека
        DATE_TURN <= :p_EndDate


Просто для сокращения места.
...
Рейтинг: 0 / 0
Среднемесячные остатки
    #39651827
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cursor777,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
SQL> select * from t1;

        ID          A          B DAT
---------- ---------- ---------- --------
         1        100          0 01.01.18
         1          0        100 15.05.18
         2        400        100 20.05.18

SQL> select * from t2;

        ID NAME
---------- ---------
         1 Cursor777
         2 Stax
         3 Anna

SQL> select
  2     id
  3    ,max(name) name
  4    ,sum(nvl(-getsaldo(id,work),0))/31 avg_saldo
  5  from t2
  6  ,(
  7    SELECT date '2018-05-01'+level-1 AS work
  8    FROM DUAL
  9    CONNECT BY date '2018-05-01'+level-1 <= date '2018-05-31') d
 10  group by id
 11  order by 1
 12  /

        ID NAME       AVG_SALDO
---------- --------- ----------
         1 Cursor777 45,1612903
         2 Stax      116,129032
         3 Anna               0



ето иногда не оптимально (искать сальдо на каждый день),
но для лабы за месяц пойдет

.....
stax
...
Рейтинг: 0 / 0
Среднемесячные остатки
    #39651854
Cursor777
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,
Большое Вам спасибо!
...
Рейтинг: 0 / 0
Среднемесячные остатки
    #39652149
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax982183пропущено...

ПРАВИЛЬНОЙ не получить.

Ситуация:
1-го числа прошло 100шт.
31-го числа продано 100 шт.

Вариант1 (100+0)/2=50
Вариант1 (100*30+0)/31=96,77
счітаем
1) что до 1-го оборота не было
2) остаток на конец дня

тогда среднее среднее (100*30+0*1)/31

если я провавильно понимаю "среднемесячный остаток"

.....
stax

Странное у вас понимание "среднемесячного остатка"
Есть складские запасы, и им безразлично есть товар или нет, есть движение или нет.
Нет товара - остаток ноль, нет движения - остатки от этого не меняются.

Соответственно в примере с 1 по 30 остатки были 100шт. 31-го - ноль.
Соответственно "средние остатки" (100*30+0)/31=96,77 и никак по другому.
...
Рейтинг: 0 / 0
Среднемесячные остатки
    #39652203
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для оптимальности товародвижения и складских запасов важны метрики "средняя реализация за период" (при ее отсутствии - "срок залежалости"), "кол-во дней периода, когда остаток был 0" и прочие кручения-верчения на тему "как бы продать побольше".

А это просто задачка, готовящая студент к общению с бухгалтерией и маркетингом :).
...
Рейтинг: 0 / 0
Среднемесячные остатки
    #39652216
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
982183Staxпропущено...

счітаем
1) что до 1-го оборота не было
2) остаток на конец дня

тогда среднее среднее (100*30+0*1)/31

если я провавильно понимаю "среднемесячный остаток"

.....
stax

Странное у вас понимание "среднемесячного остатка"
Есть складские запасы, и им безразлично есть товар или нет, есть движение или нет.
Нет товара - остаток ноль, нет движения - остатки от этого не меняются.

Соответственно в примере с 1 по 30 остатки были 100шт. 31-го - ноль.
Соответственно "средние остатки" (100*30+0)/31=96,77 и никак по другому.

а я как посчитал? 21449768

насчет по другому, отвечал на
21449262

982183Cursor777 Вопрос: в коде я делю на 31 день (например, март), но по сути, не каждый ведь день может быть оборот. Как исключать такие дни?

Зачем исключать?
Надо на каждый день посчитать остаток, сложить и разделить.
Иначе правильной цифры не получишь.


повторюсь, не обязательно (а часто излишне/затратно) считать остаток за/на каждый день

вообще-то, зависит от бухов, напр выходные/праздники

зы
в системах (в тч склиды -бакалия,гсм,комплектующие ) с которыми я работал,
остатки хранятся в отдельной табличке/mv ,

считаю ето правильным
.....
stax
...
Рейтинг: 0 / 0
Среднемесячные остатки
    #39652220
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmdmdm,

мож ето и не склад, напр счет

.....
stax
...
Рейтинг: 0 / 0
Среднемесячные остатки
    #39652242
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxа я как посчитал?
Сорри. увидел.
Stax, напр выходные/праздники
Да, есть такое дело, иногда просят нерабочие дни исключить.
Staxостатки хранятся в отдельной табличке
Ну так там наверное хранят текущие остатки, а не остатки на конец каждого дня.
...
Рейтинг: 0 / 0
Среднемесячные остатки
    #39652264
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
982183Ну так там наверное хранят текущие остатки, а не остатки на конец каждого дня.
когда был оборот (остаток, заодно и сумарные обороты)

наверное можно и каждый день, зависит от обемов

зы
имхо
по любому какие-то выверенные остатки надо хранить (на начало года,квартала, месяца, дня)

.....
stax
...
Рейтинг: 0 / 0
Среднемесячные остатки
    #39652366
kernA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax982183Ну так там наверное хранят текущие остатки, а не остатки на конец каждого дня.
когда был оборот (остаток, заодно и сумарные обороты)

наверное можно и каждый день, зависит от обемов

зы
имхо
по любому какие-то выверенные остатки надо хранить (на начало года,квартала, месяца, дня)

.....
stax

Если мы говорим про производственный учёт, то понятия "остатка" там нет, есть незавершённое производство.
Учитывается наличие(например, после инвентаризации) (у вас оно хранится в таблице 2) на определённый момент времени.

Можно посчитать среднемесячный остаток, как:
1. Дельта остатка(за день с начала месяца*) = сумма прихода* - сумма расхода
2. среднемесячный остаток = остаток на начало периода + среднее значение Дельты остатка

Но это будет среднее по больнице
...
Рейтинг: 0 / 0
Среднемесячные остатки
    #39652370
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxкогда был оборот (остаток, заодно и сумарные обороты)
Обороты наверное лучше иметь где-то в OLAP кубе.

Staxпо любому какие-то выверенные остатки надо хранить (на начало года,квартала, месяца, дня)
а зачем?
отчетность это вряд ли ускорит.
Достоверность надо проверять.

А "текущие" остатки несомненно крайне важны, дабы при реализации, при подборе товара их не высчитывать.
...
Рейтинг: 0 / 0
Среднемесячные остатки
    #39652386
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
982183Staxкогда был оборот (остаток, заодно и сумарные обороты)
Обороты наверное лучше иметь где-то в OLAP кубе.

Staxпо любому какие-то выверенные остатки надо хранить (на начало года,квартала, месяца, дня)
а зачем?
отчетность это вряд ли ускорит.
Достоверность надо проверять.

А "текущие" остатки несомненно крайне важны, дабы при реализации, при подборе товара их не высчитывать.
мож ето и куб, я в етом слабо разбираюсь
для ускорения ети избыточные данные и хранятся отдельно, напр баланс на ...

зы
диасофтовцы расказывали байку, что в некотором ОДБ (не буду называть),
остатки ВООБЩЕ не хранятся, всегда расчитываются
я не верю

.....
stax
...
Рейтинг: 0 / 0
Среднемесячные остатки
    #39652393
kernA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Stax]982183пропущено...

Обороты наверное лучше иметь где-то в OLAP кубе.

пропущено...


зы
диасофтовцы расказывали байку, что в некотором ОДБ (не буду называть),
остатки ВООБЩЕ не хранятся, всегда расчитываются
я не верю

.....
stax

я охотно верю(для промежуточных данных(за сутки)).
Либо хранить производственные остатки для отчётов, но их пересчитывать на каждый чих, либо считать на весу для каждого запуска отчёта.
То на то и выходит.
...
Рейтинг: 0 / 0
Среднемесячные остатки
    #39652420
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot kernA]Staxпропущено...


я охотно верю(для промежуточных данных(за сутки)).
Либо хранить производственные остатки для отчётов, но их пересчитывать на каждый чих, либо считать на весу для каждого запуска отчёта.
То на то и выходит.
не понял, зачем пересчитывать?
задним числом не работаем (за вчера учет в спецоперациях, которые если надо правят и остатки)

.....
stax
...
Рейтинг: 0 / 0
Среднемесячные остатки
    #39652441
kernA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Stax]kernAпропущено...

не понял, зачем пересчитывать?
задним числом не работаем (за вчера учет в спецоперациях, которые если надо правят и остатки)

.....
stax

Как раз многие работают задним числом:
1. Могут забыть завести операцию
2. Могут ошибиться в вводе данных
3. Может поступить информация от клиентов/поставщиков за предыдущий период
и тп.

Если данные изменились за какой то день, то "оперативные" остатки должны автоматом пересчитаться от даты изменения до текущего
...
Рейтинг: 0 / 0
Среднемесячные остатки
    #39652494
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot kernA]Staxпропущено...


Как раз многие работают задним числом:
1. Могут забыть завести операцию
2. Могут ошибиться в вводе данных
3. Может поступить информация от клиентов/поставщиков за предыдущий период
и тп.

Если данные изменились за какой то день, то "оперативные" остатки должны автоматом пересчитаться от даты изменения до текущего
все ето (и не только) должно быть учтено,
ето отдельные операции, с отдельным доступом, правами и тд

.....
stax
...
Рейтинг: 0 / 0
Среднемесячные остатки
    #39652506
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Практика показывает, что при автоматическом изменении текущих остатков после ввода/удаления/изменения документов,
периодически возникают ошибки.
Которые надо исправлять путем пересчета.
...
Рейтинг: 0 / 0
Среднемесячные остатки
    #39652550
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
не понял, зачем пересчитывать?
задним числом не работаем (за вчера учет в спецоперациях, которые если надо правят и остатки)

.....
stax

В процессинговых карточных системах вообще не хранят остатки кроме текущих, да и тех не одна штука (доступный, фактический ....)
Понятие "опер дня" есть но оно не такое жесткое, т.к. карточный сервис доступен 24/7
Все остатки высчитываються от текущего, т.к. например в выписке надо показать остаток на начало периода и на конец.
И алгоритмы вычисления среднемесячных (средних за период) остатков я применял другие, очень "тяжело" считать остаток на каждый день и делить на количество дней.
...
Рейтинг: 0 / 0
Среднемесячные остатки
    #39652557
kernA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Stax]kernAпропущено...

все ето (и не только) должно быть учтено,
ето отдельные операции, с отдельным доступом, правами и тд

.....
stax

Ты всё не учтёшь.
Например, реальный пример, электроснабжающие организации получают данные о поставке ЭЭ от электростанции каждый день.
Чтобы свести баланс за день, им нужно знать расход ЭЭ каждый день.
То есть, получать от потребителей данные каждые сутки. Среди потребителей присутствует пару садоводств.
Садоводство не может подавать данные каждые сутки, тк зависит от дачников, которые подают данные 1 раз в год.
Всё, задача неразрешима.

В реальности, садоводство заключает договор с поставщиком на какой то объём и этот объём считается плановым.

Один из учётов:
Берётся факт от Электростанции - вычитается расход на транспортировку - фактический расход от потребителей.
Остаток ЭЭ дробится между поставщиками по плановому расходу.

Когда появляются фактические показатели(вместо плановых), то вся ветка пересчитывается.
...
Рейтинг: 0 / 0
Среднемесячные остатки
    #39652595
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kernA,

в каждой области есть свои нюансы, поетому я и написал "и не только"
во многих случаях и не надо знать "остатки" на каждый день, достаточно напр на отчетную дату

подозреваю что, напр, учет "остатка" урана/спирта тож имеет свои нюансы, оборотов нет, а его все меньше и меньше

.....
stax
...
Рейтинг: 0 / 0
33 сообщений из 33, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Среднемесячные остатки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]