2010-03-18 116 views
4

我想獲取修改記錄的最後日期。這裏是一個簡單的示例SELECT:如何從一列中的多個表中選擇最大值

SELECT 
t01.name, 
t01.last_upd date1, 
t02.last_upd date2, 
t03.last_upd date3, 
'maxof123' maxdate 
FROM 
    s_org_ext t01, 
    s_org_ext_x t02, 
    s_addr_org t03 
WHERE 
    t02.par_row_id(+)= t01.row_id and 
    t03.row_id(+)= t01.pr_addr_id and 
    t01.int_org_flg = 'n'; 

如何獲取列maxdate以顯示三個日期的最大值?

注:沒有工會或子/嵌套的SELECT語句;)

回答

11

最大(t01.last_upd,t02.last_upd DATE2,t03.last_upd)作爲的maxDate

+4

+1,但要小心空值:'最大的(X,NULL)'爲空(在這種情況下,我們預計空值,因爲有一個外部聯接) – 2010-03-18 15:56:15

+0

看來,這個功能不支持/安裝。我需要Oracle 10/11的特殊軟件包嗎? – 2010-03-19 22:02:58

+0

不是我所知道的,它已經有一段時間了。 http://www.techonthenet.com/oracle/functions/greatest.php – heisenberg 2010-03-20 01:04:17

2

使用CASE語句的SELECT子句中做這樣的事情:

CASE WHEN date1 > date2 AND date1 > date3 THEN date1 WHEN date2 > date3 THEN date2 ELSE date3 END AS maxdate 

將盡快打出來的邏輯滿足第一個條件。

0

使用GREATEST功能,也可用於明確連接,而不是隱含聯接。

SELECT t01.name, t01.last_upd date1, t02.last_upd date2, t03.last_upd date3, 
GREATEST(t01.last_upd, t02.last_upd, t03.last_upd) AS maxdate 
FROM s_org_ext t01 
LEFT OUTER JOIN s_org_ext_x t02 ON t01.row_id = t02.par_row_i 
LEFT OUTER JOIN s_addr_org t03 ON t01.pr_addr_id = t03.row_id 
WHERE t01.int_org_flg = 'n'; 
相關問題