sql - 如何使用 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
,所以我只能查询它们而不能修改它们。
有谁知道这是否可能?
解决方案
您可以使用数组和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;
推荐阅读
- java - 我如何在发布请求的正文中发送文件?时髦的
- python - 如何解析 Youtube 构建 API 查询的响应标头(python 烧瓶)
- laravel - 所有者编辑员工时没有参数的Laravel路由
- python-3.x - 无法为 pytest 停止 Tornado
- amazon-web-services - Circle CI 中的云端缓存失效失败
- python - 如何在 Python 中检测窗口调整大小
- c# - Akka.net 测试套件询问方法
- c++ - 从可变参数模板数组引用构造函数初始化双嵌套 std::array
- reactjs - 如何使用 react props 中的函数将给定的 props 转换为要显示的结果?
- java - 使用 Spring JPA for MS-SQL 的 Upsert 查询