sql - PostgreSQL : Getting one result per date when table has start and end date columns

标签 sql postgresql date range

这有点类似于Getting date list in a range in PostgreSQL ,但不完全相同(我认为)。

我有一个 SQL 表,其中每一行都包含开始日期和结束日期。我想形成一个查询,以便对于每一行,对于这个范围内的每个日期,我得到一个结果。

例如:id=1, title=MyRange, start=2012-08-05, end=2012-08-08

查询:SELECT * FROM myTyble where id=1 AND ...

结果:

 id=1, title=MyRange, date=2012-08-05
 id=1, title=MyRange, date=2012-08-06
 id=1, title=MyRange, date=2012-08-07
 id=1, title=MyRange, date=2012-08-08

我意识到唯一键和主键行将在此结果集中重复,但这对我来说无关紧要。任何想法都将非常受欢迎!

最佳答案

您可以加入generate_series就像您从中选择一样容易。像这样的东西应该可以解决问题:

select t.*
from generate_series('2010-01-01'::timestamp, '2013-01-01'::timestamp, '1 day') as s(d)
join your_table t on (s.d between t.start and t.end)

当然,您需要提供所需的真实日期,而不是 2010-01-012013-01-01

较旧的版本,例如 8.3,没有使用时间戳的 generate_series,但您可以通过使用 generate_series 来伪造它以从初始日期产生日期偏移量:

select t.*
from generate_series(0, 1096) dt(d)
join your_table t on ('2010-01-01'::date + dt.d between t.start and t.end)

和以前一样,调整 01096'2010-01-01' 以匹配您的数据。

关于sql - PostgreSQL : Getting one result per date when table has start and end date columns,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12541289/

相关文章:

sql - Access 查询返回空字段,具体取决于表的链接方式

java - 从 PostgreSQL 函数获取数据到 java

c# - 如何将 SQL 日期结果转换为英国格式 (dd/mm/yyyy)

Java LocalDate 不接受所有 EpochDay 字段有效值

java - 查找日期列表中的所有年份

python - 使用自定义字段扩展 Django 的 ManyToManyField

sql - 使用 include 中的所有列创建索引是一种不好的做法吗?

postgresql - postgres重命名数据库不工作

node.js - sequelize 查询的可选参数

php - 如果不存在,将条目添加到数据库的最快方法