Вы также можете использовать ROW_NUMBER()
:
SELECT id, name
FROM (
SELECT id, name, ROW_NUMBER() OVER(PARTITION BY id ORDER BY name) rn
FROM mytable
) x
WHERE rn = 1
. При этом будет сохранена запись с наименьшим значением name
(поэтому '5d'
будет предшествовать '5e'
).С помощью этого метода вы также можете использовать критерии сортировки для другого столбца, который существует в том месте, где есть дубликаты (что не может выполнить агрегированный запрос с MIN()
).Кроме того, запросы с использованием оконных функций обычно работают лучше, чем эквивалентный агрегированный запрос.