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中实现这一目标?
答案 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