Получение строки с наименьшим значением столбца, если другой столбец совпадает в SQL Server - PullRequest
0 голосов
/ 24 сентября 2018
Id  Number  Value
------------------
1     6       1
2     6       2
3     9       2

У меня есть такая таблица, и, в принципе, мне нужно вернуть строку с наименьшим Value, если их столбцы Number одинаковы, пример результата, который мне нужен, показан ниже:

Id  Number  Value
-----------------
1     6       1
3     9       2

Как мне добиться этого в T-SQL?

1 Ответ

0 голосов
/ 24 сентября 2018

Вы можете использовать функцию окна 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
...