BDa*_*Dad 6 postgresql date-range generate-series postgresql-9.3
我需要为表中每个人的 2 个日期之间的每个月创建一行(结果应该是当月的第一天)。例如,如果我的源表中有以下数据:
rowID | person | startdate | enddate
1 | 12345 | 2014-04-01 | 2014-11-30
2 | 67890 | 2014-03-01 | 2014-05-01
Run Code Online (Sandbox Code Playgroud)
我希望我的目标表中的结果是:
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
Run Code Online (Sandbox Code Playgroud)
非常感谢帮忙。
不需要 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3902 次 |
| 最近记录: |