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

如果SQL Server中的另一列相同,则获取列值最小的行,sql,sql-server,tsql,select,greatest-n-per-group,Sql,Sql Server,Tsql,Select,Greatest N Per Group,我有一个这样的表,基本上,我需要返回具有最小值的行,如果它们的数字列相同,我需要的示例结果如下: Id Number Value ------------------ 1 6 1 2 6 2 3 9 2 如何在T-SQL中实现这一点?您可以使用rank窗口函数: Id Number Value ----------------- 1 6 1 3 9 2 编辑: 如注释中所述,如果有多行

我有一个这样的表,基本上,我需要返回具有最小
值的行
,如果它们的
数字
列相同,我需要的示例结果如下:

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

如何在T-SQL中实现这一点?

您可以使用
rank
窗口函数:

Id  Number  Value
-----------------
1     6       1
3     9       2
编辑:
如注释中所述,如果有多行具有最低的
,则使用
将同时返回这两行。如果只想返回其中一个,则应使用
行编号

SELECT id, number, value
FROM   (SELECT id, number, value, RANK() OVER(PARTITION BY number ORDER BY value) AS rk
        FROM   mytable)
WHERE  rk = 1

嘿,你的解决方案似乎有效,但我有一个小问题,如果“值”与某些值相同,而你只需要选择其中任何一个,你将如何处理它,因为这似乎显示了两行,即使值是sameYes,我在你回答时就发现了,非常感谢你的帮助@Suhrahj如果只想选择这些行中的一行,可以使用
row\u number
而不是
rank
。查看我编辑的答案。@Suhrahj,类似的是
从mytable中按行顺序选择id、编号、值的前1名(按数值顺序划分)
。但这避免了子选择…我很好奇并测试了它。我必须承认,使用
selecttop1withties
的解决方案执行
排序两次。一次到计算的
行数
,然后再次找到带领带的
前1名
。使用
sub-select
(或
cte
)的方法速度更快。。。
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