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

DB2中如何按星期维度聚合数据?需在现有查询中新增周内求和逻辑

可以在DB2中实现这个需求!

完全没问题,我们只需要利用DB2的日期函数来定位本周的起始日(周日),然后在原查询基础上新增聚合字段,就能同时保留每日总计、新增本周日到昨天的daily_total求和逻辑。下面是具体的实现方案:

核心逻辑拆解

DB2自带的DAYOFWEEK()函数刚好适配你的需求:它返回1代表周日、2代表周一……7代表周六。我们可以用这个函数算出本周日的日期:

CURRENT_DATE - (DAYOFWEEK(CURRENT_DATE) - 1 DAYS)

举个例子,如果今天是周三,DAYOFWEEK()会返回4,用当前日期减去3天就得到本周日的日期,刚好覆盖你需要的“周日-周二”统计范围。

修改后的完整查询

SELECT 
    employee,
    -- 保留原有的每日总计(当前日期的Brown类别数据)
    SUM(CASE WHEN category = 'Brown' THEN daily_total ELSE 0 END) AS DailyBrownNumbers,
    SUM(CASE WHEN category = 'Brown' THEN weekly_quota ELSE 0 END) AS WeeklyBrownNumbers,
    -- 新增:本周日到昨天的Brown类别daily_total总和
    SUM(CASE 
        WHEN category = 'Brown' 
             AND date_of_report >= (CURRENT_DATE - (DAYOFWEEK(CURRENT_DATE) - 1 DAYS))
             AND date_of_report < CURRENT_DATE
        THEN daily_total 
        ELSE 0 
    END) AS WeeklyBrownTotal,
    CURRENT_DATE AS DATE_OF_REPORT
FROM dailyRecords 
WHERE date_of_report >= (CURRENT_DATE - (DAYOFWEEK(CURRENT_DATE) - 1 DAYS)) -- 调整条件确保包含本周所有数据
GROUP BY employee

关键调整说明

  1. WHERE条件优化:原查询只过滤当天的数据,现在改成从本周日开始,这样既能保留当天记录用于每日总计,也能包含本周历史数据用于周总计。
  2. 周总计字段实现:通过CASE语句同时限定类别和日期范围,精准统计本周日到昨天的daily_total总和。
  3. 特殊场景兼容:如果当天是周日(DAYOFWEEK()返回1),计算出的本周日就是当天,此时date_of_report < CURRENT_DATE会自动匹配上周日到周六的所有数据,完美贴合“周日至周六为一周”的统计规则。

效果验证示例

假设今天是2024年6月19日(周三):

  • 计算出的本周日是2024年6月16日
  • 查询会自动统计6月16日(周日)、17日(周一)、18日(周二)的daily_total总和,同时保留6月19日的每日总计数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:17:55