Най-кратката (и вероятно най-бързата) заявка би била с DISTINCT ON
, PostgreSQL разширение на SQL стандарта DISTINCT
клауза:
SELECT DISTINCT ON (1)
id, count, year
FROM tbl
ORDER BY 1, 2 DESC, 3;
Числата се отнасят за редови позиции в SELECT
списък. Можете да изписвате имената на колоните за по-голяма яснота:
SELECT DISTINCT ON (id)
id, count, year
FROM tbl
ORDER BY id, count DESC, year;
Резултатът е подреден по id
и т.н., които могат или не могат да бъдат добре дошли. Във всеки случай е по-добре от „недефиниран“.
Той също така прекъсва връзките (когато няколко години споделят един и същ максимален брой) по добре дефиниран начин:изберете най-ранната година. Ако не ви пука, изпуснете year
от ORDER BY
. Или изберете последната година с year DESC
.
Замного редове за id
, другите техники за заявки са (много) по-бързи. Вижте:
- Изберете първо ред във всяка група GROUP BY?
- Оптимизирайте заявката GROUP BY, за да извлечете последния ред за потребител