sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur väljer man id med max datumgrupp efter kategori i PostgreSQL?

Detta är ett perfekt användningsfall för DISTINCT ON - en Postgres-specifik förlängning av standarden DISTINCT :

SELECT DISTINCT ON (category)
       id  -- , category, date  -- any other column (expression) from the same row
FROM   tbl
ORDER  BY category, date DESC;

Försiktig med fallande sorteringsordning. Om kolumnen kan vara NULL, kanske du vill lägga till NULLS LAST :

  • Sortera efter kolumn ASC, men NULL-värden först?

DISTINCT ON är enkelt och snabbt. Detaljerad förklaring i detta relaterade svar:

  • Välj första raden i varje GROUP BY-grupp?

För stora tabeller med många rader per category överväga ett alternativt tillvägagångssätt:

  • Optimera GROUP BY-frågan för att hämta den senaste raden per användare
  • Optimera gruppvis maximal fråga


  1. FORALL-uttalande med INDICES-OF Bound-klausul i Oracle Database

  2. 2 sätt att kontrollera kompatibilitetsnivån i Oracle (SQLcl &SQL*Plus)

  3. Ställ in ett standardvärde för en kolumn i SQLite:DEFAULT Constraint

  4. Varför Optimizern inte använder Buffer Pool Knowledge