从同一个表中加入两个查询 - SELECT DISTINCT?

时间:2013-10-25 20:33:53

标签: sql oracle select distinct

我有两个由AUTO_KEY字段链接的表,从一个表中我正在检索数字(id),另一个表我按照数字(id)获得了几个状态,每个状态都有一个与之关联的日期它。 我需要将结果仅限制为所有数字(ids)的最大/最新日期和相应的状态

SELECT
    OPERATION.NUMBER, 
    STATUS.STATUS, 
    Max(STATUS.DATE)

FROM 
   STATUS, 
   OPERATION

WHERE 
OPERATION.AUTO_KEY = STATUS.AUTO_KEY 

从这里

Number  Status    Date
-----------------------------
1       A       10/20/13
1       B       10/15/13
2       A       10/10/13
2       AX      10/05/13
2       AD      10/03/13
3       DD      10/03/13

结果应该是

Number  Status    Date
-----------------------------
1       A       10/20/13
2       A       10/10/13
3       DD      10/03/13

提前致谢

2 个答案:

答案 0 :(得分:1)

您可以将 CTE ROW_NUMBER() 功能结合使用。另请使用Table JOIN 代替 FROM STATUS, OPERATION

;With CTE AS (
   SELECT O.NUMBER, S.STATUS, S.DATE, 
          ROW_NUMBER() OVER (ORDER BY S.DATE DESC) RN
   FROM  STATUS S JOIN OPERATION O
           ON O.AUTO_KEY = S.AUTO_KEY 
)
SELECT NUMBER, STATUS, DATE
FROM CTE
WHERE RN = 1
ORDER BY NUMBER

答案 1 :(得分:0)

SELECT OPERATION.CNUMBER, 
       STATUS.STATUS, 
       STATUS.CDATE
FROM STATUS, 
     OPERATION
WHERE OPERATION.AUTO_KEY = STATUS.AUTO_KEY 
AND STATUS.CDATE = (
SELECT MAX(STATUS.CDATE) MAX_DATE
FROM STATUS, 
      OPERATION
WHERE OPERATION.AUTO_KEY = STATUS.AUTO_KEY 
GROUP BY OPERATION.CNUMBER )