2011-07-12 52 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;