Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wählen Sie den neuesten Eintrag aus

Die anderen Vorschläge sind richtig, aber die kompakteste und schnellste Lösung ist höchstwahrscheinlich, wenn Sie FIRST_VALUE und LAST_VALUE Analysefunktionen

SELECT DISTINCT
   FIRST_VALUE(LOCATION_ID) OVER (PARTITION BY PERSON_ID ORDER BY THE_DATE 
             ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS LOCATION_ID, 
   PERSON_ID, 
   MAX(THE_DATE) OVER (PARTITION BY PERSON_ID) AS LAST_DATE
FROM YOUR_TABLE;

Andere bevorzugen

SELECT 
   MAX(LOCATION_ID) KEEP (DENSE_RANK FIRST ORDER BY DATE) as LOCATION, 
   PERSON_ID, 
   MAX(DATE) as LAST_DATE
FROM YOUR_TABLE
GROUP BY PERSON_ID;

was dasselbe tut, aber ich bin mit dieser Klausel nicht so vertraut. Siehe aggregate_function KEEP