sql >> Databáze >  >> RDS >> Oracle

vyberte nejnovější záznam

Ostatní návrhy jsou správné, ale nejkompaktnější a nejrychlejší řešení je nejpravděpodobnější, když použijete Analytické funkce FIRST_VALUE a LAST_VALUE

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;

Ostatní lidé preferují

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;

což dělá totéž, ale já tuto klauzuli tolik neznám. Viz aggregate_function KEEP



  1. Deklarativní SQLAlchemy:definování spouštěčů a indexů (Postgres 9)

  2. Oracle sloučí konstanty do jedné tabulky

  3. Umístění buněk FPDF

  4. T-SQL:Jak vytvořím jedinečný klíč, který rozlišuje malá a velká písmena?