如何在SQL Server中编写SQL语句获取基于两列最小值的行
在SQL Server中获取两列均为最小值的行
要找到同时满足Rank和Val1两列都是整个表中最小值的行,这里有几种实用的方法,我会逐一说明:
方法一:使用子查询直接过滤
这是最直观的方式,先分别查询出Rank和Val1的最小值,再用WHERE子句筛选同时符合这两个条件的行:
SELECT * FROM YourTableName WHERE Rank = (SELECT MIN(Rank) FROM YourTableName) AND Val1 = (SELECT MIN(Val1) FROM YourTableName);
如果你的表中有多行同时满足Rank和Val1都是最小值,这个查询会返回所有符合条件的行,不会遗漏。
方法二:使用窗口函数(适用于更复杂的场景)
如果后续需要扩展逻辑(比如按其他分组筛选),窗口函数会更灵活。这里可以用ROW_NUMBER()或者RANK():
用ROW_NUMBER()(只返回一行,若有多个符合条件的行,会随机取一个)
WITH RankedData AS ( SELECT *, ROW_NUMBER() OVER (ORDER BY Rank ASC, Val1 ASC) AS RowNum FROM YourTableName ) SELECT * FROM RankedData WHERE RowNum = 1;
用RANK()(返回所有同时满足Rank最小且Val1最小的行)
WITH RankedData AS ( SELECT *, RANK() OVER (ORDER BY Rank ASC, Val1 ASC) AS RankNum FROM YourTableName ) SELECT * FROM RankedData WHERE RankNum = 1;
方法三:使用TOP 1结合ORDER BY(仅需返回一行时)
如果你确定只有一行符合条件,或者只需要任意一行符合条件的记录,可以用TOP 1:
SELECT TOP 1 * FROM YourTableName ORDER BY Rank ASC, Val1 ASC;
这个查询会先按Rank升序排序,再按Val1升序排序,取第一行——也就是同时满足两列最小的行。
内容的提问来源于stack exchange,提问作者user9494268
相关产品推荐
相关产品推荐

