postgresql - 在 PostgreSQL 中的两个日期之间的每个月创建一行

标签 postgresql postgresql-9.3 date-range generate-series

我需要为表中每个人的 2 个日期之间的每个月(结果应该是该月的第一天)创建一行。例如,如果我的源表中有以下数据:

rowID | person      | startdate   | enddate
1     | 12345       | 2014-04-01  | 2014-11-30
2     | 67890       | 2014-03-01  | 2014-05-01

我希望我的目标表中的结果是:

person | month
12345  | 2014-04-01
12345  | 2014-05-01
12345  | 2014-06-01
12345  | 2014-07-01
12345  | 2014-08-01
12345  | 2014-09-01
12345  | 2014-10-01
12345  | 2014-11-01
67890  | 2014-03-01
67890  | 2014-04-01
67890  | 2014-05-01

非常感谢您的帮助。

最佳答案

无需 CTE 或横向连接:

select
    person,
    generate_series(
        date_trunc('month', startdate), 
        enddate, '1 month'
    )::date as month
from rfem
order by 1, 2
;
 person |   month    
--------+------------
  12345 | 2014-04-01
  12345 | 2014-05-01
  12345 | 2014-06-01
  12345 | 2014-07-01
  12345 | 2014-08-01
  12345 | 2014-09-01
  12345 | 2014-10-01
  12345 | 2014-11-01
  67890 | 2014-03-01
  67890 | 2014-04-01
  67890 | 2014-05-01

关于postgresql - 在 PostgreSQL 中的两个日期之间的每个月创建一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41232002/

相关文章:

postgresql - PostgreSQL-错误 : invalid byte sequence for encoding "UTF8": 0xeb 0x6e 0x74

django - 如何在其Docker容器中执行psql交互?

postgresql - @@ROWCOUNT 在 PostgreSQL 9.3 中

java - 在 SQL 查询中测试 null

r - 子集data.table由R中的日期范围设置

python - 创建自定义日期范围,一天 22 小时 python

bash - 使用 Bash 测试是否启用了 PostgreSQL hstore 扩展

postgresql - Datagrip - 与 Heroku 的 PostgreSQL 连接不显示表

postgresql - Postgres Docker 容器不运行创建 SQL 脚本

sql - 计算日期范围内的天数?