Nejkratší (a možná nejrychlejší) dotaz by byl s DISTINCT ON
, rozšíření PostgreSQL standardu SQL DISTINCT
klauzule:
SELECT DISTINCT ON (1)
id, count, year
FROM tbl
ORDER BY 1, 2 DESC, 3;
Čísla odkazují na pořadové pozice v SELECT
seznam. Pro přehlednost můžete hláskovat názvy sloupců:
SELECT DISTINCT ON (id)
id, count, year
FROM tbl
ORDER BY id, count DESC, year;
Výsledek je seřazen podle id
atd. což může a nemusí být vítané. V každém případě je to lepší než "undefined".
Také to přerušuje vazby (když více let sdílí stejný maximální počet) dobře definovaným způsobem:vyberte nejstarší rok. Pokud je vám to jedno, vynechte year
z ORDER BY
. Nebo vyberte poslední rok pomocí year DESC
.
Pro mnoho řádků na id
, ostatní techniky dotazování jsou (mnohem) rychlejší. Viz:
- Vyberte nejdříve řádek v každé skupině GROUP BY?
- Optimalizujte dotaz GROUP BY pro načtení posledního řádku na uživatele