sql >> Database teknologi >  >> RDS >> Oracle

vælg den seneste post

De andre forslag er korrekte, men den mest kompakte og hurtigste løsning er mest sandsynlig, når du bruger FIRST_VALUE og LAST_VALUE analytiske funktioner

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;

Andre foretrækker

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;

som gør det samme, men jeg er ikke så bekendt med denne klausul. Se aggregate_function KEEP



  1. Hvordan kan jeg forespørge tabel i tabel?

  2. Udskiftning af NULL med 0 i en SQL-serverforespørgsel

  3. DROP TABEL HVIS FINDER Eksempel i PostgreSQL

  4. en sql-forespørgsel til at sammenligne resultaterne af følgende forespørgsler