【问题标题】:Get previous two Sundays Date DB2获取前两个星期日日期 DB2
【发布时间】:2021-10-23 10:42:32
【问题描述】:

我一直在寻找这个问题的答案,似乎有很多不同的“解决方案”,没有什么是我正在寻找的。我的以下查询运行良好,但我需要能够以“2021-08-15”格式修改日期,以根据列选择上周日或上周日。我需要能够只运行查询并获得动态结果,而不是每周手动更改日期。这是否可以使用例如当前日期来实现?我所有的尝试都没有结果:

SELECT 
    RMD.ISSUE_ID,
    MAX(CASE WHEN AS_OF_DATE = '2021-08-15' THEN CURRENT.ISSUE_TITLE END) AS CURR_ISSUE_TITLE,
    MAX(CASE WHEN AS_OF_DATE = '2021-08-15' THEN CURRENT.MEMBER_IMPACT END) AS CURR_MEMBER_IMPACT,
    MAX(CASE WHEN AS_OF_DATE = '2021-08-08' THEN CURRENT.MEMBER_IMPACT END) AS PREV_MEMBER_IMPACT,
    MAX(CASE WHEN AS_OF_DATE = '2021-08-15' THEN CURRENT.ISM_STATUS END) AS CURR_ISM_STATUS,
    MAX(CASE WHEN AS_OF_DATE = '2021-08-15' THEN CURRENT.ISSUE_OWNER_ORG END) AS CURR_ISSUE_OWNER_ORG,
    MAX(CASE WHEN AS_OF_DATE = '2021-08-15' THEN CURRENT.ISSUE_OWNER END) AS CURR_ISSUE_OWNER,
    MAX(CASE WHEN AS_OF_DATE = '2021-08-15' 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 ('2021-08-08', '2021-08-15') 
GROUP BY RMD.ISSUE_ID
HAVING MAX(CASE WHEN AS_OF_DATE = '2021-08-08' THEN CURRENT.MEMBER_IMPACT END) <> MAX(CASE WHEN AS_OF_DATE = '2021-08-15' THEN CURRENT.MEMBER_IMPACT END) ;

如您所见,我对日期有很多依赖关系,但它们都是最近的或上一个星期日。任何帮助或指导都会很棒,感谢您的宝贵时间。

【问题讨论】:

  • 您应该可以使用两个SET variable statements 来消除所有日期常量。 Stack Overflow 问题DB2 Between Statement for Last Sunday to This Coming Saturday 应该可以帮助您进行计算。
  • 我尝试运行此代码,但它不成功,我之前看过该帖子。 select current date - int((dayofweek(current date))-1) days from sysibm.sysdummy1) select current date + int(7-(dayofweek(current date))) days from sysibm.sysdummy1) DB2 SQL 错误:SQLCODE=-104, SQLSTATE=42601, SQLERRMC=);rom sysibm.sysdummy1;END-OF-STATEMENT, DRIVER=3.57.1​​10

标签: sql date db2


【解决方案1】:

试试这个:

SELECT
  RMD.ISSUE_ID
, MAX(CASE WHEN AS_OF_DATE = t.last_sunday THEN CURRENT.ISSUE_TITLE END) AS CURR_ISSUE_TITLE
...

FROM LOD.ISM_ISSUE_SUMMARY_HIST_WKY CURRENT
JOIN LOD.RMD_ISS_REMED_SUMMARY RMD
 ON CURRENT.ISSUE_ID = RMD.ISSUE_ID

JOIN
(
  values
  (
    current date - (dayofweek_iso (current date)    ) days
  , current date - (dayofweek_iso (current date) + 7) days
  )
) t (last_sunday, prev_sunday)
ON AS_OF_DATE IN (t.last_sunday, t.prev_sunday)

GROUP BY RMD.ISSUE_ID
HAVING MAX(CASE WHEN AS_OF_DATE = t.prev_sunday THEN CURRENT.MEMBER_IMPACT END) <> MAX(CASE WHEN AS_OF_DATE = t.last_sunday THEN CURRENT.MEMBER_IMPACT END) ;

请参阅Date operations and durationsDAYOFWEEK_ISO scalar function

【讨论】:

  • 你好@MARKBARINSTEIN 运行效果很好。可能是一个愚蠢的问题,但我对 DB2 不太了解,这实际上是我第一次使用 DB2,但我可以使用嵌套查询将其实现到我的查询中,还是我必须为每个日期参考做一些单独的事情。
  • 我已经编辑了答案。请检查一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-02
  • 1970-01-01
  • 2018-06-12
  • 1970-01-01
  • 2019-12-29
  • 2017-05-02
  • 1970-01-01
相关资源
最近更新 更多