【问题标题】:Return "null" value if no record for date如果日期没有记录,则返回“null”值
【发布时间】:2017-06-29 12:10:19
【问题描述】:

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

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

【问题讨论】:

  • 桌子长什么样?您想在缺少日期的行上显示什么?
  • 应该在每一列显示一行空值

标签: sql postgresql


【解决方案1】:

您需要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;

【讨论】:

  • 感谢您的提示,但我不明白。此查询:select g.dte, t.date, t.value1, t.value2 from generate_series('2017-01-01'::timestamp::date, '2017-01-03'::timestamp::date, interval '1 day') g(dte) left join table t on g.dte = t.date 返回 3 条记录,但除 g.dte 外,所有列中的所有记录均为空值
  • 嘿戈登,忘了我上面的评论。它完美地工作:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-27
  • 1970-01-01
  • 2013-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-26
相关资源
最近更新 更多