获得其中一个表的最高结果

时间:2016-01-22 10:06:36

标签: sql oracle oracle11g

我需要连接三个表TM, TA, MS - TA在TM中的每一行都有多个记录我需要在TM中基于名为status的字段获取last row from TA的所有行。最新记录

这是我的疑问:

select * from TABLE1 MS RIGHT OUTER JOIN
TABLE2 TM ON MS.CID = TM.CID
LEFT OUTER JOIN TABLE3 TA ON TM.EID=TA.EID;

1 个答案:

答案 0 :(得分:1)

一种方法使用row_number()

select *
from TABLE1 MS JOIN
     TABLE2 TM
     ON MS.CID = TM.CID JOIN
     (SELECT TA.*, ROW_NUMBER() OVER (PARTITION BY EID ORDER BY STATUS DESC) as seqnum
      FROM TABLE3 TA
     ) TA
     ON TM.EID = TA.EID AND seqnum = 1;

你的问题没有说明不匹配的记录,所以我删除了外连接。这些只应在您打算保留不匹配的记录时使用(并且大多数人为此目的更喜欢LEFT JOINRIGHT JOIN