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

syl*_*ylo 2 sql postgresql

我正在开始一个查询,我希望获得一个时间范围之间的所有记录.例如:

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)

Gor*_*off 5

你需要一个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)