首页 > 解决方案 > 如何使用 SQL SELECT 填写缺失的日期并保持运行总和?

问题描述

有一个表格包含某些日期的值:

   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,所以我只能查询它们而不能修改它们。

有谁知道这是否可能?

标签: sqlpresto

解决方案


您可以使用数组和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;

推荐阅读