как я могу подсчитать итоги в запросе в зависимости от даты? - PullRequest
1 голос
/ 28 мая 2020

Ниже вы можете увидеть мой запрос, который дает следующий результат:

select t.actual_date, 
   t.id_key, 
   t.attendance_status, 
   t.money_step, 
   sum(t.money_step) over (partition by t.id_key order by t.actual_date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)as accumulated
from example t
order by t.id_key, t.actual_date

Results of the query

Я хочу, чтобы столбец «накопленный» суммировался значение «money_step» для каждого id_key. Если статус_выпуска во второй раз равен 15 для идентификатора, счетчик должен суммироваться с самого начала. Для ID_KEY = 1 это должно выглядеть так:

накоплено:

Row 1:20
Row 2: 80
Row 3: 100
Row 4: 120

Как это сделать в запросе? Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 28 мая 2020

Я понимаю, что вы хотите сбросить сумму после первой строки, где attendance_status имеет значение 15. Один из вариантов использует условное max() для определения подгруппы:

select 
    actual_date, 
   id_key, 
   attendance_status, 
   money_step, 
   sum(t.money_step) over (
       partition by id_key, grp 
       order by actual_date
   ) as accumulated
from (
    select 
        e.*,
        max(case when attendance_status = 15 then 1 else 0 end) over(
            partition by id_key 
            order by actual_date 
            rows between unbounded preceding and 1 preceding
        ) grp
    from example e
) e
order by id_key, actual_date
...