DB2 SQL - CASE WHEN 的差(减)

DB2 SQL - Difference (minus) of CASE WHEN

我正在尝试在 DB2 环境中区分两种情况,如下所示:

select DISTINCT 
TLORDER.BILL_NUMBER, 
TLORDER.XCHARGES,
TLORDER.CHARGES,
TLORDER.DISTANCE, 
TLORDER.CREATED_TIME,
TLORDER.DESTCITY,
(CASE WHEN ODRSTAT.STATUS = '5ARRCONS' THEN MAX(ORDSTAT.CHANGED)
END -
CASE WHEN ODRSTAT.STATUS = 'PICKD' THEN MIN(ODRSTAT.CHANGED)
END) AS DETENTION
FROM ODRSTAT
LEFT JOIN TLORDER ON ODRSTAT.ORDER_ID = TLORDER.DETAIL_LINE_ID

我使用各种在线资源尝试了这个概念的一些变体,并使用相同的列找到了很多求和的答案,但没有求差的答案。

如果 Col. Status 中的状态为 'pickd',则目标是从最新日期(在同一列 CHANGED 中)减去最旧日期(在 Col. CHANGED 中),如果 Col. STATUS 中的状态为'5arrcons'

考虑以下数据集:

Key ORDER_ID    STATUS      CHANGED
1   10          5ARRCONS    12/10/2017
2   10          OTHER       12/10/2017
3   10          PICKD       12/5/2017
4   10          OTHER       12/3/2017
5   10          PICKD       12/1/2017

在这种情况下,CASE 语句的所需结果将是 最大值 = 12/10/2017 最小 = 12/1/2017

所以 (12/10/2017 - 12/1/2017) 等于 9
9 是我想要的返回值

我们将不胜感激。
谢谢你的时间

很难准确地说出你想要什么。但是,这可能就是您想要的:

SELECT o.BILL_NUMBER, o.XCHARGES, o.CHARGES, o.DISTANCE, o.CREATED_TIME, o.DESTCITY,
       (MAX(CASE WHEN os.STATUS = '5ARRCONS' THEN os.CHANGED END) -
        MIN(CASE WHEN os.STATUS = 'PICKD' THEN os.CHANGED END)
       ) AS DETENTION
FROM ODRSTAT os JOIN
     TLORDER o
     ON os.ORDER_ID = o.DETAIL_LINE_ID
GROUP BY o.BILL_NUMBER, o.XCHARGES, o.CHARGES, o.DISTANCE, o.CREATED_TIME, o.DESTCITY;