совокупная сумма пропущенных значений месяца в sql - PullRequest
0 голосов
/ 02 августа 2020

у меня есть входные данные ниже

date             amount
01-01-2020         10
01-02-2020         15
01-03-2020         10
01-05-2020         20
01-06-2020         30
01-08-2020         5
01-09-2020         6
01-10-2020         10

выберите сумму (дату), сверх (дату раздела) из таблицы;

после добавления недостающих значений месяца мне нужен вывод

вывод

Date            amount                  cum_sum
01-01-2020         10                     10
01-02-2020         15                     25
01-03-2020         10                     35 
01-04-2020         0                      35
01-05-2020         20                     55
01-06-2020         30                     85
01-07-2020         0                      85
01-08-2020         5                      90
01-09-2020         6                      96
01-10-2020         10                     106

Ответы [ 2 ]

1 голос
/ 02 августа 2020

Обычно даты генерируются с помощью рекурсивного запроса, а затем используются оконные функции.

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

with recursive all_dates (dt, max_dt) as (
    select min(date) dt, max(date) max_dt from mytable
    union all
    select dt + interval '1' day, max_dt from all_dates where dt < max_dt
)
select d.dt, sum(t.amount) over(order by c.dt) amount
from all_dates d
left join mytable t on t.date = d.dt
order by d.dt
0 голосов
/ 02 августа 2020

Вам просто нужна оконная функция:

select t.*, sum(amount) over (order by date)
from table t
...