如何从一列中的多个表中选择最大值

时间:2010-03-18 15:29:06

标签: sql oracle

我想获取修改记录的最后日期。这是一个简单的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列以显示三个日期的最大值?

注意:没有UNION或子/嵌套SELECT语句;)

3 个答案:

答案 0 :(得分:11)

最大(t01.last_upd,t02.last_upd date2,t03.last_upd)为maxdate

答案 1 :(得分:2)

在SELECT子句中使用CASE语句执行以下操作:

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

一旦满足第一个条件,它就会突破逻辑。

答案 2 :(得分: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';