如果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