Den kortaste (och möjligen snabbaste) frågan skulle vara med DISTINCT ON
, en PostgreSQL-tillägg av SQL-standarden DISTINCT
klausul:
SELECT DISTINCT ON (1)
id, count, year
FROM tbl
ORDER BY 1, 2 DESC, 3;
Siffrorna hänvisar till ordningspositioner i SELECT
lista. Du kan stava kolumnnamn för tydlighetens skull:
SELECT DISTINCT ON (id)
id, count, year
FROM tbl
ORDER BY id, count DESC, year;
Resultatet är sorterat efter id
etc. som kanske är välkomna eller inte. Det är bättre än "odefinierat" i alla fall.
Det bryter också banden (när flera år delar samma maximala antal) på ett väldefinierat sätt:välj det tidigaste året. Om du inte bryr dig, släpp year
från ORDER BY
. Eller välj det senaste året med year DESC
.
För många rader per id
, andra frågetekniker är (mycket) snabbare. Se:
- Välj först rad i varje GROUP BY-grupp?
- Optimera GROUP BY-frågan för att hämta den senaste raden per användare