sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan vælger jeg id med maks. datogruppe efter kategori i PostgreSQL?

Dette er en perfekt use-case for DISTINCT ON - en Postgres-specifik udvidelse af standarden DISTINCT :

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

Forsigtig med faldende sorteringsrækkefølge. Hvis kolonnen kan være NULL, kan du tilføje NULLS LAST :

  • Sortere efter kolonne ASC, men NULL-værdier først?

DISTINCT ON er enkel og hurtig. Detaljeret forklaring i dette relaterede svar:

  • Vælg første række i hver GROUP BY-gruppe?

Til store tabeller med mange rækker pr. category overvej en alternativ tilgang:

  • Optimer GROUP BY-forespørgsel for at hente seneste række pr. bruger
  • Optimer gruppevis maksimal forespørgsel


  1. Sådan gør du:Rens en mysql InnoDB-lagringsmotor?

  2. Sådan grupperes efter måned fra Dato-feltet ved hjælp af sql

  3. psycopg2.OperationalError:FATAL:ikke-understøttet frontend-protokol 1234.5679:server understøtter 2.0 til 3.0

  4. Tillad null i unik kolonne