2010-12-23 32 views
4

我們定義爲一個歷史表如下:尋找最後的重複行(Oracle)的SQL

--ID (pk) -----------Object ID--------------Work ID--------date------ 
    1     1111     AAAA   1/1/2010 
    2     1111     AAAA   1/2/2010 
    3     2222     BBBB   1/1/2010 
    4     3333     CCCC   1/1/2010 
    5     1111     DDDD   1/3/2010 

我們需要最新(基於日期爲ID爲基礎)排每部作品ID 。請注意,對象ID可以有多個工作ID,我們需要每個工作ID的最新信息。

我們需要爲我們的結果集是什麼:

ID (pk) -----------Object ID--------------Work ID--------date------ 
2     1111     AAAA   1/2/2010 
3     2222     BBBB   1/1/2010 
4     3333     CCCC   1/1/2010 
5     1111     DDDD   1/3/2010 

思想/想法?

回答

4
SELECT * 
FROM (
     SELECT h.*, 
       ROW_NUMBER() OVER (PARTITION BY workID ORDER BY date DESC) AS rn 
     FROM history 
     ) 
WHERE rn = 1 
+0

這個完美工作。謝謝! – Randyaa 2010-12-23 18:14:12

0
select * from your_table a where (a.date, a.work_id) in (select max(b.date), b.work_id from your_table b where a.work_id=b.work_id group by work_id)