我有一些像这样的Postgres数据:
date | count
2015-01-01 | 20
2015-01-02 | 15
2015-01-05 | 30
我想运行一个查询,将缺少日期的数据拉到0,如下所示:
date | count
2015-01-01 | 20
2015-01-02 | 15
2015-01-03 | 0
2015-01-04 | 0
2015-01-05 | 30
这是一个非常广泛的日期,我需要它填补所有空白。我怎样才能用SQL实现这个目标?
答案 0 :(得分:2)
给出一个表junk
:
d | c
------------+----
2015-01-01 | 20
2015-01-02 | 15
2015-01-05 | 30
运行
select fake.d, coalesce(j.c, 0) as c
from (select min(d) + generate_series(0,7,1) as d from junk) fake
left outer join junk j on fake.d=j.d;
让我们:
d | c
------------+----------
2015-01-01 | 20
2015-01-02 | 15
2015-01-03 | 0
2015-01-04 | 0
2015-01-05 | 30
2015-01-06 | 0
2015-01-07 | 0
2015-01-08 | 0
您当然可以调整系列的开始日期,运行的长度等等。
答案 1 :(得分:0)
这些数据在哪里?到外部来源或其他表或视图?
这可能是一个更好的解决方案,但您可以使用另一个空值的整数列创建一个新表(或者在数据传输的任何位置使用excel)。然后使用当前数据集更新该表,然后将所有空值替换为零。
这是一种非常迂回的做事方式,但它会起作用。
我没有足够的代表发表评论:(
这也是一个很好的参考 Using COALESCE to handle NULL values in PostgreSQL