我有一个包含 3 个日期字段的表格。我试图在每个记录中找到三个日期中最小的一个。

我想做的是:

Select id, some_value, date_a, date_b, date_c,
        min(date_a, date_b, date_c) as smallest_date
from some_table;

但这显然行不通。没有规则表明哪个日期可能比其他日期大,有时它们中的任意数量(无到全部)都可能为 NULL。我确信我已经在某个地方看到了一个优雅的解决方案,它不涉及大量丑陋的 case 语句并检查 null,但我似乎不记得如何去做。

(甲骨文 10g)

最佳答案

你想要 LEAST 函数:

SELECT LEAST(date_a, date_b, date_c) as smallest_date
FROM some_table;

AFAIK,如果有些可能为空,那么您将不得不在每列上使用 NVL 来设置默认值:
SELECT LEAST(NVL(date_a,sysdate), NVL(date_b,sysdate), NVL(date_c,sysdate)) as smallest_date
FROM some_table;

关于sql - MIN 来自记录中的字段列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6666187/

10-09 17:45