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

DB2如何动态获取最近两个周日日期替换SQL固定日期

DB2动态计算最近两个周日的查询实现方案

核心日期计算逻辑

DB2内置的DAYOFWEEK函数返回值规则为:1=周日、2=周一...7=周六,基于这个规则可以动态计算所需的两个周日日期:

  • 最近周日(若当前日期为周日则直接取当天):CURRENT DATE - (DAYOFWEEK(CURRENT DATE) - 1) DAYS
  • 上上周日:在最近周日的基础上再减7天即可,即CURRENT DATE - (DAYOFWEEK(CURRENT DATE) - 1) DAYS - 7 DAYS

如果你的AS_OF_DATE字段是字符串类型,用格式参数10转换为YYYY-MM-DD格式的字符串即可:

  • 最近周日字符串:CHAR(CURRENT DATE - (DAYOFWEEK(CURRENT DATE) - 1) DAYS, 10)
  • 上上周日字符串:CHAR(CURRENT DATE - (DAYOFWEEK(CURRENT DATE) - 1) DAYS - 7 DAYS, 10)

修改后的完整查询

SELECT 
    RMD.ISSUE_ID,
    MAX(CASE WHEN AS_OF_DATE = CHAR(CURRENT DATE - (DAYOFWEEK(CURRENT DATE) - 1) DAYS, 10) THEN CURRENT.ISSUE_TITLE END) AS CURR_ISSUE_TITLE,
    MAX(CASE WHEN AS_OF_DATE = CHAR(CURRENT DATE - (DAYOFWEEK(CURRENT DATE) - 1) DAYS, 10) THEN CURRENT.MEMBER_IMPACT END) AS CURR_MEMBER_IMPACT,
    MAX(CASE WHEN AS_OF_DATE = CHAR(CURRENT DATE - (DAYOFWEEK(CURRENT DATE) - 1) DAYS -7 DAYS, 10) THEN CURRENT.MEMBER_IMPACT END) AS PREV_MEMBER_IMPACT,
    MAX(CASE WHEN AS_OF_DATE = CHAR(CURRENT DATE - (DAYOFWEEK(CURRENT DATE) - 1) DAYS, 10) THEN CURRENT.ISM_STATUS END) AS CURR_ISM_STATUS,
    MAX(CASE WHEN AS_OF_DATE = CHAR(CURRENT DATE - (DAYOFWEEK(CURRENT DATE) - 1) DAYS, 10) THEN CURRENT.ISSUE_OWNER_ORG END) AS CURR_ISSUE_OWNER_ORG,
    MAX(CASE WHEN AS_OF_DATE = CHAR(CURRENT DATE - (DAYOFWEEK(CURRENT DATE) - 1) DAYS, 10) THEN CURRENT.ISSUE_OWNER END) AS CURR_ISSUE_OWNER,
    MAX(CASE WHEN AS_OF_DATE = CHAR(CURRENT DATE - (DAYOFWEEK(CURRENT DATE) - 1) DAYS, 10) THEN CURRENT.ISSUE_APPROVER END) AS CURR_ISSUE_APPROVER
FROM LOD.ISM_ISSUE_SUMMARY_HIST_WKY CURRENT INNER JOIN
     LOD.RMD_ISS_REMED_SUMMARY RMD
     ON CURRENT.ISSUE_ID = RMD.ISSUE_ID
WHERE AS_OF_DATE IN (
    CHAR(CURRENT DATE - (DAYOFWEEK(CURRENT DATE) - 1) DAYS, 10),
    CHAR(CURRENT DATE - (DAYOFWEEK(CURRENT DATE) - 1) DAYS -7 DAYS, 10)
) 
GROUP BY RMD.ISSUE_ID
HAVING MAX(CASE WHEN AS_OF_DATE = CHAR(CURRENT DATE - (DAYOFWEEK(CURRENT DATE) - 1) DAYS -7 DAYS, 10) THEN CURRENT.MEMBER_IMPACT END) <> MAX(CASE WHEN AS_OF_DATE = CHAR(CURRENT DATE - (DAYOFWEEK(CURRENT DATE) - 1) DAYS, 10) THEN CURRENT.MEMBER_IMPACT END) ;

业务适配说明

如果你的业务规则要求即使当天是周日,也要取上周日作为最近周日,只需要把所有日期计算逻辑里的(DAYOFWEEK(CURRENT DATE) - 1)改成DAYOFWEEK(CURRENT DATE)即可,调整后会统一往前推到上一个完整的周日,不会包含当天数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:54:04