我需要按ID提取三列的最大日期:创建日期,更新日期和交易日期。以下是我引用的数据的简化形式,并不代表我正在使用的实际数据。
+--------------------------------------------------------+
| ID | Date Created | Updated Date | Transaction Date |
+--------------------------------------------------------+
| 12 | 19-APR-19 | NULL | 20-APR-19 |
| 68 | 02-Nov-18 | 03-DEC-18 | 02-NOV-18 |
| 12 | 05-MAY-19 | 12-MAY-19 | 12-MAY-19 |
| 72 | 10-SEP-19 | 01-OCT-19 | 25-SEP-19 |
+--------------------------------------------------------+
在每个ID检索到这些列的最大值之后,我应该得到:
+---------------------+
| ID | Date |
+---------------------+
| 68 | 03-DEC-18 |
| 12 | 12-MAY-19 |
| 72 | 01-OCT-19 |
+---------------------+
到目前为止,我已经尝试以下变化:
CASE WHEN
TO_CHAR(ud.updated_date,'MM/DD/YYYY') >= TO_CHAR(NVL(mqp.trans_effective_date,0),'MM/DD/YYYY') AND TO_CHAR(ud.updated_date,'MM/DD/YYYY') >= TO_CHAR(NVL(mt.date_created,0),'MM/DD/YYYY') THEN TO_CHAR(ud.updated_date,'MM/DD/YYYY')
WHEN
TO_CHAR(mt.transaction_date,'MM/DD/YYYY') >= TO_CHAR(NVL(ud.updated_date,0),'MM/DD/YYYY') AND TO_CHAR(mt.transaction_date,'MM/DD/YYYY') >= TO_CHAR(NVL(mt.date_created,0),'MM/DD/YYYY') THEN TO_CHAR(mt.transaction_date,'MM/DD/YYYY')
WHEN
TO_CHAR(mt.date_created,'MM/DD/YYYY') >= TO_CHAR(NVL(ud.updated_date,0),'MM/DD/YYYY') AND TO_CHAR(mt.date_created,'MM/DD/YYYY') >= TO_CHAR(NVL(mt.transaction_date,0),'MM/DD/YYYY') THEN TO_CHAR(mt.date_created,'MM/DD/YYYY')
END Date
但是这会导致以下错误:
ORA-00932: inconsistent datatypes: expected NLS PARAMETER got DATE
00932. 00000 - "inconsistent datatypes: expected %s got %s"
*Cause:
*Action:
我也尝试过以下不同的变化:
GREATEST(TO_CHAR(mt.date_created,ud.updated_date,mt.transaction_date), 'MM/DD/YYYY') Date
但随后出现此错误:
ORA-00932: inconsistent datatypes: expected NLS PARAMETER got DATE
00932. 00000 - "inconsistent datatypes: expected %s got %s"
*Cause:
*Action
任何建议将不胜感激!
使用greatest()
:
select id, greatest(updated_date, mqp.trans_effective_date, mt.date_created)
from . . .
假设所有类型均为date
(如您的问题所暗示),那么您应该没有转换问题。
如果您在多行上有ID,请使用聚合:
select id, greatest(max(updated_date), max(mqp.trans_effective_date), max(mt.date_created))
from . . .
如果按ID分组,则需要3个日期中最大的一个:
SELECT ID,
TO_CHAR(MAX(GREATEST("date_created", "updated_date", "transaction_date")),'MM/DD/YYYY') "Date"
FROM tablename
GROUP BY ID
请参见demo。结果:
> ID | Date
> -: | :---------
> 72 | 10/01/2019
> 68 | 12/03/2018
> 12 | 05/12/2019
您已经尝试过正确的事情,只需要简单的更改(首先选择最大的日期,然后使用TO_CHAR
将其转换为字符):
TO_CHAR(GREATEST(mt.date_created,ud.updated_date,mt.transaction_date), 'MM/DD/YYYY') as your_Date
干杯!