如何从一列中的多个表中选择最大值
问题描述:
我想获取修改记录的最后日期。这里是一个简单的示例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语句;)
答
最大(t01.last_upd,t02.last_upd DATE2,t03.last_upd)作为的maxDate
答
使用CASE语句的SELECT子句中做这样的事情:
CASE WHEN date1 > date2 AND date1 > date3 THEN date1 WHEN date2 > date3 THEN date2 ELSE date3 END AS maxdate
将尽快打出来的逻辑满足第一个条件。
答
使用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';
+1,但要小心空值:'最大的(X,NULL)'为空(在这种情况下,我们预计空值,因为有一个外部联接) – 2010-03-18 15:56:15
看来,这个功能不支持/安装。我需要Oracle 10/11的特殊软件包吗? – 2010-03-19 22:02:58
不是我所知道的,它已经有一段时间了。 http://www.techonthenet.com/oracle/functions/greatest.php – heisenberg 2010-03-20 01:04:17