powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Рекурсивный запрос или аналитика?
12 сообщений из 12, страница 1 из 1
Рекурсивный запрос или аналитика?
    #39413775
(o-O)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

Возникла необходимость написать запрос (view) к табличке, в которой между полями установлена зависимость.

Таблица из 4х колонок.
Код: sql
1.
2.
3.
4.
5.
6.
Дата		Показатель1	Показатель2	Показатель3
01.01.2012	-                  -2000                -2000
02.01.2012	-2000                0                  -2000
03.01.2012	-2000               -500                 -2500
04.01.2012	-2500                0                  -2500
и т.д



Правила заполнения показателей:
Показатель1 (Sum1): равно значению Показателя3 на предшествующую Дату (если не было то пусто);
Показатель2 (Sum2): значение которое нам известно на Дату;
Показатель3 (Sum3): Показатель1+Показатель2

Нам известны только пары значений: дата и показатель2 (см WITH ниже).
нужно получить запрос, показывающий таблицу выше.
Также у меня есть табличка-справочник dates, которая содержит все последовательные календарные даты в поле ddate

Унылая попытка№1:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
WITH test AS
(
SELECT TO_DATE('01.01.2012','dd.mm.yyyy') dt, -2000 sum2 FROM dual UNION ALL
SELECT TO_DATE('03.01.2012','dd.mm.yyyy') dt, -500 sum2 FROM dual
)
SELECT rep.ddate, lag(sum2) OVER(ORDER BY dat_date) AS sum1, rep.sum2, sum3 FROM
(
SELECT d.ddate, t.sum2
  FROM dates d, test t
 WHERE d.ddate = t.dt(+)
   AND d.ddate BETWEEN TO_DATE('28.12.2011','dd.mm.yyyy') AND TO_DATE('05.01.2012','dd.mm.yyyy')
 ORDER BY d.ddate
) rep



Подскажите пожалуйста какой подход нужно использовать в подобных задачах и очень помогут примеры. Спасибо!
...
Рейтинг: 0 / 0
Рекурсивный запрос или аналитика?
    #39413802
Унылый lag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
(o-O), a чем, собственно, lag вам так уныл?
...
Рейтинг: 0 / 0
Рекурсивный запрос или аналитика?
    #39413805
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(o-O)какой подход нужно использоватьПоказатели 1 и 3 это sum(Показатель2)
...
Рейтинг: 0 / 0
Рекурсивный запрос или аналитика?
    #39413807
(o-O)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Допустим я использую lag для определения 1го показателя, который является предшествующим значением показателя 3, который в свою очередь завязан на показатель 1.
Смущает зависимость между показателями 1 и 3, хотя эта зависимость на разные даты..
...
Рейтинг: 0 / 0
Рекурсивный запрос или аналитика?
    #39413821
Унылый lag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
(o-O),
выходит так, что показатель 3 - накапливающая сумма
Код: plsql
1.
sum(t.sum2) over (order by d.ddate) /*rows ...*/ sum3
...
Рейтинг: 0 / 0
Рекурсивный запрос или аналитика?
    #39413824
Zloxa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Унылый lag(o-O),
выходит так, что показатель 3 - накапливающая сумма
Код: plsql
1.
sum(t.sum2) over (order by d.ddate) /*rows ...*/ sum3



Соответственно показатель1 - накапливающая сумма за вычетом показателя 2
...
Рейтинг: 0 / 0
Рекурсивный запрос или аналитика?
    #39413851
j2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(o-O), если будет несколько "показатель2" за одну дату, какой ожидаете результат?
...
Рейтинг: 0 / 0
Рекурсивный запрос или аналитика?
    #39413857
(o-O)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На одну дату - один показатель2
...
Рейтинг: 0 / 0
Рекурсивный запрос или аналитика?
    #39413871
j2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(o-O), можно примерно так:
Код: plsql
1.
2.
3.
4.
5.
6.
with t as (select to_date('01.01.2012','dd.mm.yyyy') dat, -2000 val from dual
 union all select to_date('02.01.2012','dd.mm.yyyy') dat,  0 val from dual
 union all select to_date('03.01.2012','dd.mm.yyyy') dat, -500 val from dual
 union all select to_date('04.01.2012','dd.mm.yyyy') dat, 0 val from dual
 )
select dat, val, sum(val) over (order by dat), sum(val) over (order by dat rows between unbounded preceding and 1 preceding)  from t 
...
Рейтинг: 0 / 0
Рекурсивный запрос или аналитика?
    #39414753
(o-O)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
j2k(o-O), можно примерно так:
Код: plsql
1.
2.
3.
4.
5.
6.
with t as (select to_date('01.01.2012','dd.mm.yyyy') dat, -2000 val from dual
 union all select to_date('02.01.2012','dd.mm.yyyy') dat,  0 val from dual
 union all select to_date('03.01.2012','dd.mm.yyyy') dat, -500 val from dual
 union all select to_date('04.01.2012','dd.mm.yyyy') dat, 0 val from dual
 )
select dat, val, sum(val) over (order by dat), sum(val) over (order by dat rows between unbounded preceding and 1 preceding)  from t 



Спасибо, с подходом накапливающих сумм примерно разобрался.
А получится ли использовать данный подход, если в исходные данные ввести валюту в отдельную колнку и выполнять эти расчеты в разрезе валюты?
Например в примере выше -2000 будем иметь валюту доллар, а -500 евро.
Соответственно показатели 1 и 3 должны считаться в разрезе своей валюты показателя2.
Попробовал добавить partition by но не помогло.
По всей видимости при вычислении sum1 и sum3 нужно «протягивать» валюту показателя2 во вложенном запросе?
...
Рейтинг: 0 / 0
Рекурсивный запрос или аналитика?
    #39414864
j2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(o-O), Ничего не понял из вашего объяснения. Приведите конкретный пример чего хотите получить на выходе.
...
Рейтинг: 0 / 0
Рекурсивный запрос или аналитика?
    #39414874
(o-O)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
j2k(o-O), Ничего не понял из вашего объяснения. Приведите конкретный пример чего хотите получить на выходе.

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


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