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