我正在开始一个查询,我想在一个时间范围之间获取所有记录。例如:
select * from table where date between '2017-01-01' and '2017-01-31'
返回31条记录。但如果没有'2017-01-02'的记录,它将返回30条记录。
对于缺少的日期,查询是否可能返回空记录以获得31条记录?
数据/表
2017-01-01 | value1 | value2
2017-01-03 | value3 | value3
选择查询应该返回
2017-01-01 | value1 | value2
null | null | null
2017-01-03 | value3 | value3
答案 0 :(得分:5)
您需要left join
。使用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;