我有一个包含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)
答案 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;