SQL - возврат промежуточного итога (с использованием последнего итогового числа) - PullRequest
1 голос
/ 09 апреля 2020

Предположим, у меня есть таблица ниже

ID   SUB_ID   YEAR  Month  Value
A1   A101      1      1     100
A1   A101      1      2     100
A1   A101      2      1     100
A1   A101      2      2     100
B1   B101      1      1     200
B1   B101      1      2     200
B1   B101      2      1     200
B1   B101      2      2     200
B1   B102      2      1     300  (So this B102 is a new record starting in YEAR 2 MONTH 1)
B1   B102      2      2     300

И я хочу получить текущую сумму для каждого идентификатора, используя последнее общее число. Вывод должен быть:

ID  YEAR  RUNNING_SUM
A1    1      100 
A1    2      100 (for A1, there is no value change or no new SUB_ID, so the sum is always 100)
B1    1      200
B1    2      500 (in YEAR 2, B102 was added)

Как мы можем этого достичь? По сути, я добавляю значение для идентификатора, если появляется новый SUB_ID. Это будет легко в Таблице с использованием вычисления LOD (фиксированный идентификатор)

Вот SQL Fiddle (http://sqlfiddle.com/#! 18 / 95b63d / 1 )

Спасибо!

1 Ответ

0 голосов
/ 09 апреля 2020

Я думаю, вы просто хотите row_number() и агрегирование:

select id, year, sum(value)
from (select t.*,
             row_number() over (partition by id, sub_id, year order by month desc) as seqnum
      from t
     ) t
where seqnum = 1
group by id, year
...