2011-07-12 35 views
4

我有一个包含3个日期字段的表。我试图找到每个记录中三个日期中最小的一个。MIN从记录中的字段列表中删除

我想要做的是这样的:

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,但我似乎无法记住如何去做。

(Oracle 10g中)

回答

8

你想要的一种功能:

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

据我所知,如果一些可能为空,那么你将不得不使用NVL在每列设置一个默认:

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