如何实现选定日期范围与当月及上月同期的数据对比?
用date_part实现当月与上月同期数据对比的方案
完全可以通过date_part函数实现这个需求,结合日期截断和运算就能精准定位上月同期的日期范围,进而输出对比结果。
核心思路
- 用
date_part('day', 日期)提取选定日期的日份(比如12月1日提取1,12月15日提取15) - 用
date_trunc('month', 日期)获取当月第一天,减去1个月得到上月第一天 - 上月第一天加上(日份-1)天,就能得到上月同期的对应日期
示例SQL实现
假设用户选定的当月日期范围是2022-12-01至2022-12-15,以下是统计并输出对比结果的SQL:
WITH date_ranges AS ( SELECT -- 当月日期范围 '2022-12-01'::date AS current_start, '2022-12-15'::date AS current_end, -- 计算上月同期起始日期 (date_trunc('month', '2022-12-01'::date) - INTERVAL '1 month') + (date_part('day', '2022-12-01'::date) - 1) * INTERVAL '1 day' AS prev_start, -- 计算上月同期结束日期 (date_trunc('month', '2022-12-15'::date) - INTERVAL '1 month') + (date_part('day', '2022-12-15'::date) - 1) * INTERVAL '1 day' AS prev_end ) -- 输出上月同期统计结果 SELECT 'Count X ' || to_char(prev_start, 'DD-MM-YYYY') || ' to ' || to_char(prev_end, 'DD-MM-YYYY') AS result FROM date_ranges UNION ALL -- 输出当月统计结果 SELECT 'Count X ' || to_char(current_start, 'DD-MM-YYYY') || ' to ' || to_char(current_end, 'DD-MM-YYYY') AS result FROM date_ranges;
执行后会得到如下输出:
Count X 01-11-2022 to 15-11-2022
Count X 01-12-2022 to 15-12-2022
内容的提问来源于stack exchange,提问作者Ajay Ramola
相关产品推荐
相关产品推荐

