基于最多两个日期的列值

时间:2019-07-17 22:13:53

标签: sql plsql

我正在尝试根据两个日期中的最大值来获取一列的值。

我已经尝试过,以获取最多两个日期。

SELECT VIN,
       MAX(CASE WHEN DELIVERY_TYPE = 25 THEN TRANSACTION_DATE END) AS DELIVERY_DATE,
       MAX(CASE WHEN DELIVERY_TYPE <> 25 THEN TRANSACTION_DATE END) AS TRANSACTION_DATE
FROM TABLE
WHERE VIN IN ('XYZ')
GROUP BY VIN;

这是我需要的,但是我需要交付代码。

 VIN   DELIVERY_DATE   OTHER_DELIVERY DATE
 XYZ      26-DEC-18           01-MAY-19

我怎么得到这个

 VIN   DELIVERY_DATE   OTHER_DELIVERY DATE  Delivery_code
 XYZ      26-DEC-18           01-MAY-19        010

源数据是这样的

 VIN  TRANSACTION_DATE  Delivery_code
 XYZ      26-DEC-18         025
 XYZ      01-MAY-19         010

编辑:新数据源

 VIN              TRANSACTION_DATE  DELIVERY_TYPE
xzy                   10-APR-19         025
xyz                     NULL           010
xzy                  12-JUL-19          035

1 个答案:

答案 0 :(得分:0)

您可以使用keep

SELECT VIN,
       MAX(CASE WHEN DELIVERY_TYPE = 25 THEN TRANSACTION_DATE END) AS DELIVERY_DATE,
       MAX(CASE WHEN DELIVERY_TYPE <> 25 THEN TRANSACTION_DATE END) AS TRANSACTION_DATE,
       MAX(DELIVERY_CODE) KEEP (DENSE_RANK FIRST ORDER BY TRANSACTION_DATE DESC NULLS LAST) as DELIVERY_CODE
FROM TABLE
WHERE VIN IN ('XYZ')
GROUP BY VIN;