我需要为表中每个人的 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/