powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Среднемесячные остатки
25 сообщений из 33, страница 1 из 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
25 сообщений из 33, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Среднемесячные остатки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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