2010-03-18 114 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'; 
相关问题