2010-12-23 13 views
4

Wir haben eine Geschichte Tabelle, die wie folgt definiert ist:Suche nach der letzten doppelten Zeile in (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 

Wir brauchen die neueste (Datum-basierten NICHT-ID-basierten) Zeile pro Arbeits ID . Beachten Sie, dass eine Objekt-ID mehrere Arbeits-IDs haben kann und wir die neueste für jede Arbeits-ID benötigen.

Was wir als unsere Ergebnismenge benötigen:

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 

Gedanken/Ideen?

Antwort

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

dies funktionierte perfekt. Vielen Dank! – Randyaa

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) 
Verwandte Themen