如果没有日期记录,则返回“null”值

时间:2017-06-29 12:10:20

标签: sql postgresql

我正在开始一个查询,我想在一个时间范围之间获取所有记录。例如:

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

1 个答案:

答案 0 :(得分:5)

您需要left join。使用generate_series()

在Postgres中很容易
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;