Den korteste (og muligvis hurtigste) forespørgsel ville være med DISTINCT ON
, en PostgreSQL-udvidelse af SQL-standarden DISTINCT
klausul:
SELECT DISTINCT ON (1)
id, count, year
FROM tbl
ORDER BY 1, 2 DESC, 3;
Tallene henviser til ordenspositioner i SELECT
liste. Du kan stave kolonnenavne for klarhedens skyld:
SELECT DISTINCT ON (id)
id, count, year
FROM tbl
ORDER BY id, count DESC, year;
Resultatet er sorteret efter id
osv. som måske eller måske ikke er velkomne. Det er under alle omstændigheder bedre end "udefineret".
Det bryder også båndene (når flere år deler det samme maksimale antal) på en veldefineret måde:vælg det tidligste år. Hvis du er ligeglad, så drop year
fra ORDER BY
. Eller vælg det seneste år med year DESC
.
For mange rækker pr. id
, andre forespørgselsteknikker er (meget) hurtigere. Se:
- Vælg først række i hver GRUPPE FOR gruppe?
- Optimer GROUP BY-forespørgsel for at hente seneste række pr. bruger