如何在PostgreSQL中生成基于指定月末重复的日期序列
解决PostgreSQL生成重复月末日期的问题
要实现每个月末日期重复出现的结果,你可以通过CROSS JOIN另一个generate_series来为每个月末日期生成重复行。
修改后的查询语句
假设你希望每个月末日期重复3次(可根据需求自由调整重复次数):
SELECT -- 简化的月末日期计算方式,与原逻辑等价 ((DATE_TRUNC('month', ld) + '1 month'::INTERVAL)::DATE - 1) AS pe_produc FROM GENERATE_SERIES(TIMESTAMP'2022-01-31', TIMESTAMP'2022-03-31', INTERVAL'1 month') AS ld -- 关联生成重复次数的序列,参数范围决定重复次数 CROSS JOIN GENERATE_SERIES(1, 3) AS repeat_count;
关键说明
- 原查询已经能正确生成目标月末日期,通过
CROSS JOIN第二个generate_series,会将每个月末日期与重复序列的每一行做笛卡尔积,从而得到重复的日期行。 - 你可以随时调整第二个
generate_series的参数:比如GENERATE_SERIES(1, 5)会让每个日期重复5次,GENERATE_SERIES(1, 10)则重复10次。 - 月末日期的计算简化写法
(DATE_TRUNC('month', ld) + INTERVAL '1 month')::DATE - 1,和原查询逻辑完全一致,但可读性更强。
示例结果
执行上述查询后,返回结果如下:
pe_produc ---------- 2022-01-31 2022-01-31 2022-01-31 2022-02-28 2022-02-28 2022-02-28 2022-03-31 2022-03-31 2022-03-31
内容的提问来源于stack exchange,提问作者Jean
相关产品推荐
相关产品推荐

