如何用TO_CHAR编写WHERE条件筛选SQL中过去12个月的年-月统计数据
过去12个月按年-月统计的SQL过滤条件写法
最优写法(推荐,可走字段索引)
不要对received_date日期字段套转换函数做过滤,会导致字段上的索引失效拉低查询性能,直接做日期范围判断即可:
SELECT to_char(received_date, 'YYYY-MM') AS stat_month FROM table1 WHERE received_date >= date_trunc('month', CURRENT_DATE - INTERVAL '12 months') -- 如需包含当前月已产生的数据,可删除下面这行条件 AND received_date < date_trunc('month', CURRENT_DATE) GROUP BY to_char(received_date, 'YYYY-MM') ORDER BY stat_month;
逻辑说明:
date_trunc('month', CURRENT_DATE)作用是把当前日期截断到当月第一天零点,小于这个值的过滤条件可以排除还未结束的当前月数据- 整个过滤逻辑刚好覆盖完整的12个自然月,完全匹配按年-月维度统计的需求
兼容写法(不推荐,仅做参考)
如果你坚持要用to_char转换后的值做匹配,可按如下写法编写条件:
SELECT to_char(received_date, 'YYYY-MM') AS stat_month FROM table1 WHERE to_char(received_date, 'YYYY-MM') >= to_char(CURRENT_DATE - INTERVAL '12 months', 'YYYY-MM') GROUP BY to_char(received_date, 'YYYY-MM') ORDER BY stat_month;
内容的提问来源于stack exchange,提问作者Fred
相关产品推荐
相关产品推荐

