如果另一列在SQL Server中相同,则获取具有最小列值的行

时间:2018-09-24 01:58:59

标签: sql sql-server tsql select greatest-n-per-group

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 :(得分:2)

您可以使用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