从记录中的字段列表中选择MIN

Fru*_*ner 4 sql oracle

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

我想做的是:

Select id, some_value, date_a, date_b, date_c,
        min(date_a, date_b, date_c) as smallest_date
from some_table;
Run Code Online (Sandbox Code Playgroud)

但这显然不起作用.没有规则建议哪个日期可能比其他日期更大,有时它们中的任何数量(不是全部)都可以为NULL.我确信我已经看到了一个优雅的解决方案,这个地方没有涉及大量丑陋的案例陈述和检查null,但我似乎无法记住如何做到这一点.

(Oracle 10g)

DCo*_*kie 8

你想要最少的功能:

SELECT LEAST(date_a, date_b, date_c) as smallest_date
FROM some_table;
Run Code Online (Sandbox Code Playgroud)

AFAIK,如果某些可能为null,那么您将不得不在每列上使用NVL来设置默认值:

SELECT LEAST(NVL(date_a,sysdate), NVL(date_b,sysdate), NVL(date_c,sysdate)) as smallest_date
FROM some_table;
Run Code Online (Sandbox Code Playgroud)