Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 获取特定列值SQL Server的前N名_Sql Server - Fatal编程技术网

Sql server 获取特定列值SQL Server的前N名

Sql server 获取特定列值SQL Server的前N名,sql-server,Sql Server,我有一个我收集的统计数据表,有3列:id、年份和点数。我想获得每年按点数排序的前N行。在实际场景中,有更多的列,但是如果我可以获得ID和year,并使用subselect获得其余的列。有没有比每年单独执行更简单的方法呢?您可以使用OVER子句和窗口函数,在每组结果中排名前N名 ;WITH cte AS (SELECT Row_number() OVER( partition BY year

我有一个我收集的统计数据表,有3列:id、年份和点数。我想获得每年按点数排序的前N行。在实际场景中,有更多的列,但是如果我可以获得ID和year,并使用subselect获得其余的列。有没有比每年单独执行更简单的方法呢?

您可以使用OVER子句和窗口函数,在每组结果中排名前N名

;WITH cte
     AS (SELECT Row_number()
                  OVER(
                    partition BY year
                    ORDER BY points Desc) Rn,
                *
         FROM   tablename)
SELECT *
FROM   cte
WHERE  rn <= 10 

按年份使用行数和分区。你能快速抛出SQL吗?我从未使用过ROW_NumberPadeep,我已经发布了一个答案:你可能会想点下来,也考虑什么应该发生与领带。也就是说,以下两组中最重要的是什么:1、2、2、17?您可以返回1、2、2,在这种情况下,您可能希望使用密集秩而不是行数,或者您可以只返回其中一个任意值,但行数将按所写方式工作。没有正确的答案;这只是一个选择。@BenThul如果我使用Dense_Rank,那么它不会返回前N行,在您的示例中,它将返回前N+1行。这正是我的观点。在我的示例中,有多行符合第二高的条件。如果你想返回所有的,你可以使用稠密的等级。如果您只想返回任意一个,请使用row_number。正如我所说,这是一个选择:这里没有正确或错误的答案。