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

如何在SQL中统计2024年工单对应的过去30天历史工单数量?

按日期范围统计客户过去30天工单数量的SQL方案

你当前用ROW_NUMBER()得到的是客户2024年所有工单的倒序行号,而非过去30天的数量。要实现按日期范围限制统计,需要用带窗口框架的COUNT()聚合窗口函数,核心是在窗口中指定日期范围而非仅排序。

修改后的SQL语句

SELECT customer_id,
       ticket_number,
       receive_dt,
       COUNT(ticket_number) OVER (
           PARTITION BY customer_id
           ORDER BY receive_dt
           RANGE BETWEEN INTERVAL '30 days' PRECEDING AND CURRENT ROW
       ) AS "Num Tickets Last 30 Days"
FROM tickets
WHERE EXTRACT(YEAR FROM receive_dt) = 2024

关键说明

  1. 替换ROW_NUMBER()为COUNT():ROW_NUMBER()仅生成行号,COUNT()会统计窗口内的工单总数,符合你要的数量统计需求。
  2. 窗口框架限定日期范围:RANGE BETWEEN INTERVAL '30 days' PRECEDING AND CURRENT ROW会将统计范围锁定在当前工单的receive_dt往前30天内,确保只计算该时间区间内的同一客户工单。
  3. 保留分组与排序:PARTITION BY customer_id确保统计仅针对当前客户,ORDER BY receive_dt保证窗口按时间顺序计算,避免跨时间范围的错误统计。

数据库语法差异提示

不同数据库对日期区间的写法略有不同:

  • MySQL/MariaDB(8.0.22+):支持与上面相同的语法,也可写为RANGE BETWEEN INTERVAL 30 DAY PRECEDING AND CURRENT ROW
  • SQL Server:需用RANGE BETWEEN DATEADD(day, -30, receive_dt) AND CURRENT ROW
  • Oracle:使用RANGE BETWEEN NUMTODSINTERVAL(30, 'day') PRECEDING AND CURRENT ROW

内容的提问来源于stack exchange,提问作者Joshua Pelton-Stroud

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 19:53:12