You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 19:36:03