sql - 从三个日期列中获取最大日期
问题描述
我需要按 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 . . .
推荐阅读
- python-3.x - 使用 Python 接收和写入 Azure blob 存储的 Azure 组合器函数
- qt - 无法运行 qgis 版本 Qt_5_PRIVATE_API 未定义
- sas - 使用 PROC GLM 重复测量方差分析,但估计语句按天和组给出结果
- java - 如何遍历列表有效负载并作为 Springboot 中的单个行项插入数据库?
- excel - “*variable* = Dir”导致错误:循环文件时出现“无效的过程调用或参数”
- python - 我的不和谐机器人音乐命令似乎不起作用。我导入了 PyNacl 和 youtube_dl,但它仍然不起作用
- function - DAX - 如何用季度值的最后一个月填充空月?
- c - 使用 makefile 将 .der 文件嵌入到 C 代码中
- javascript - 为什么提供 key={index} 会导致与不定义键不同的行为?
- php - 我可以通过数据库锁定在不同的服务中使用自动装配的 EntityManager 吗?