我试图在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中的状态为“5arrcons”,那么如果Col.Status中的状态从最新日期(在相同的col CHANGED中)被“挑选”,则目标是减去最旧的日期(在col.CANGEDED中)。 / p>
考虑以下数据集:
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语句的通缉结果将是 MAX = 12/10/2017 最低= 12/1/2017
所以(12/10/2017 - 12/1/2017)等于9
9是我想要的东西
任何和所有帮助将不胜感激 谢谢你的时间
答案 0 :(得分:1)
很难确切地说出你想要的东西。但是,这可能是你想要的:
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;