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

如何在Oracle SQL中按周统计列计数?附现有按月分组代码

Oracle按周分组统计SQL实现

问题背景

原有按月分组统计的Oracle SQL如下:

select project_name, to_char (date_sys, 'Month') as Month, sum(BATCH.RECORDS_NUMBER) as Count_of_Documents
 from 
    BATCH
    group by project_name, to_char(date_sys, 'Month');

需要修改为按周分组,输出格式要求为YYYY-MM-DD格式的周起始日期+文档计数,且结果按日期排序。此前尝试使用DATE_FORMAT/DATEPART函数触发ORA-00904错误,这是因为这两个是MySQL专属函数,Oracle不支持。

正确实现代码

以下是符合需求的Oracle SQL代码,默认以周一作为每周起始(ISO周标准):

SELECT
    TO_CHAR(TRUNC(date_sys, 'IW'), 'YYYY-MM-DD') AS week,
    SUM(RECORDS_NUMBER) AS Count
FROM BATCH
GROUP BY TRUNC(date_sys, 'IW')
ORDER BY TRUNC(date_sys, 'IW');

关键说明

  1. 周起始规则调整:
    • 若需以周日作为每周起始,将TRUNC(date_sys, 'IW')替换为TRUNC(date_sys, 'DAY')
    • 若需以每年1月1日所在周为第一周,替换为TRUNC(date_sys, 'WW')
  2. 排序逻辑:直接按TRUNC处理后的日期字段排序,比格式化后的字符串排序更准确可靠
  3. 分组依据:必须使用TRUNC(date_sys, 'IW')而非格式化后的字符串分组,避免因字符串转换导致的分组错误

内容的提问来源于stack exchange,提问作者SunnyDays

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 16:05:25