SQL Server选择排名数据的第一个实例

时间:2012-06-20 14:53:49

标签: sql sql-server

我有一个创建如下结果集的查询:

Rank   Name
1      Fred
1      John
2      Mary
2      Fred
2      Betty
3      John
4      Betty
4      Frank

然后我需要为每个名字选择最低等级,例如:

Rank   Name
1      Fred
1      John
2      Mary
2      Betty
4      Frank

这可以在TSQL中完成吗?

3 个答案:

答案 0 :(得分:6)

SELECT MIN(Rank) AS Rank, Name
FROM TableName
GROUP BY Name

答案 1 :(得分:4)

select name, min(rank)
from nameTable
group by name

答案 2 :(得分:3)

正如Paul + Kevin指出的那样,可以使用MIN / MAX等提取从聚合中返回值的简单情况(只需注意RANK是保留字)

在更一般/更复杂的情况下,例如如果你需要找到第二/第N个最高等级,你可以使用PARTITIONROW_NUMBER()进行排名,然后按等级过滤。

SELECT [Rank], [Name]
FROM
(
    SELECT [RANK], [Name], 
           ROW_NUMBER() OVER (PARTITION BY [Name] ORDER BY [Rank]) as [RowRank]
    FROM [MyTable]
) AS [MyTableReRanked]
WHERE [RowRank] = @N
ORDER BY [Rank];