Вы можете использовать функцию окна rank
:
SELECT id, number, value
FROM (SELECT id, number, value, RANK() OVER(PARTITION BY number ORDER BY value) AS rk
FROM mytable)
WHERE rk = 1
РЕДАКТИРОВАТЬ: Как отмечено в комментариях, если есть более одной строки с самым низким value
, использование rank
вернет оба.Если вы хотите вернуть только один из них, вы должны использовать row_number
вместо:
SELECT id, number, value
FROM (SELECT id, number, value,
ROW_NUMBER() OVER(PARTITION BY number ORDER BY value) AS rn
FROM mytable)
WHERE rn = 1