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

时间:2011-07-12 14:52:43

标签: 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;

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

(Oracle 10g)

1 个答案:

答案 0 :(得分:8)

你想要最少的功能:

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

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

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