我正在开始一个查询,我希望获得一个时间范围之间的所有记录.例如:
select * from table where date between '2017-01-01' and '2017-01-31'
Run Code Online (Sandbox Code Playgroud)
返回31条记录.但如果没有'2017-01-02'的记录,它将返回30条记录.
对于缺少的日期,查询是否可能返回空记录以获得31条记录?
数据/表
2017-01-01 | value1 | value2
2017-01-03 | value3 | value3
Run Code Online (Sandbox Code Playgroud)
选择查询应该返回
2017-01-01 | value1 | value2
null | null | null
2017-01-03 | value3 | value3
Run Code Online (Sandbox Code Playgroud)
你需要一个left join.这在Postgres很容易,使用generate_series():
select g.dte, t.col1, . . .
from generate_series('2017-01-1'::timestamp, '2017-01-31'::timestamp, interval '1 day') g(dte) left join
table t
on g.dte = t.date;
Run Code Online (Sandbox Code Playgroud)