Najkrótsze (i prawdopodobnie najszybsze) zapytanie to DISTINCT ON
, rozszerzenie PostgreSQL standardu SQL DISTINCT
klauzula:
SELECT DISTINCT ON (1)
id, count, year
FROM tbl
ORDER BY 1, 2 DESC, 3;
Liczby odnoszą się do pozycji porządkowych w SELECT
lista. Dla jasności możesz przeliterować nazwy kolumn:
SELECT DISTINCT ON (id)
id, count, year
FROM tbl
ORDER BY id, count DESC, year;
Wynik jest uporządkowany według id
itp., które mogą, ale nie muszą być mile widziane. W każdym razie jest to lepsze niż „nieokreślone”.
Zrywa również więzi (gdy wiele lat ma tę samą maksymalną liczbę) w dobrze zdefiniowany sposób:wybierz najwcześniejszy rok. Jeśli Ci to nie zależy, upuść year
z ORDER BY
. Lub wybierz ostatni rok za pomocą year DESC
.
Dla wielu wierszy na id
, inne techniki zapytań są (znacznie) szybsze. Zobacz:
- Wybierz najpierw wiersz w każdej grupie GROUP BY?
- Zoptymalizuj zapytanie GROUP BY, aby pobrać najnowszy wiersz na użytkownika