选择第n个最高分

时间:2012-05-18 00:10:46

标签: sql-server-2005 greatest-n-per-group

我有一张桌子:

create table marks(stdName nvarchar(30), marks float)
insert into marks
select 'std1', 98
union all select 'std2', 96
union all select 'std3', 95
union all select 'std4', 97
union all select 'std5', 93

我想创建存储过程以选择第n个最高标记的行作为给定的输入参数。如果输入参数为3,则应显示“std2”,96或者是否为 输入参数为5,应显示'std5',93。

2 个答案:

答案 0 :(得分:0)

您可以使用cte ROW_NUMBER功能:

WITH cte AS(
    SELECT  stdName
    ,       marks
    ,       ROW_NUMBER()OVER(ORDER BY marks DESC)As MarkRank
    from marks
)
SELECT stdName, marks
FROM cte
WHERE MarkRank = @rank

答案 1 :(得分:-1)

我已经解决了这个问题。感谢蒂姆的帮助。我对存储过程感到困惑。

create procedure showmarks
(@rank int)
as
    begin

WITH cte AS(
    SELECT  stdName
    ,       marks
    ,       ROW_NUMBER()OVER(ORDER BY marks DESC)As MarkRank
    from marks
)
SELECT stdName, marks
FROM cte
WHERE MarkRank = @rank
end