如何使用SQL SELECT填写缺失的日期并保持值的连续运行?

时间:2019-12-06 20:17:35

标签: sql presto

有一个表,其中包含某些日期的值:

   date    |    value
-------------------------
2019-01-01 |     50
2019-01-03 |     100
2019-01-06 |     150
2019-01-08 |     20

但是我希望做的是创建一个从第一个日期到最后一个日期具有连续总和的时间序列,这样:

   date    |    value
-------------------------
2019-01-01 |     50    
2019-01-02 |     50
2019-01-03 |     150   (+100)
2019-01-04 |     150
2019-01-05 |     150
2019-01-06 |     300   (+150)
2019-01-07 |     300   
2019-01-08 |     320   (+20)

唯一的限制是所有表都是read only,所以我只能查询它们而不能修改它们。

有人知道这是否可能吗?

1 个答案:

答案 0 :(得分:0)

您可以使用数组和unnest()生成日期。其余为left join和累计金额:

select dates.dte,
       sum(t.value) over (order by dates.dte)
from (values (sequence(from_iso86001_date('2019-01-01'),
                       from_iso86001_date('2019-01-08'),
                       interval '1' day
                      )
             )
     ) v(date_array) cross join
     unnest(v.date_array) dates(dte) left join
     t
     on t.date = dates.dte;