sql server - 按组选择前x行

时间:2014-10-09 23:56:51

标签: sql-server

我有一个问题,我浪费了太多时间玩。它可以简化为:

  • 平台:SQL Server
  • 你有一张年龄和邮政编码的表格
  • 列出每个邮政编码中排名前5位的最年长的人

我可以看到如何使用游标进行游戏,但有没有一种方法可以使用top和group by来实现这一目标?

赞赏所有投入!

2 个答案:

答案 0 :(得分:0)

您需要使用ROW_NUMBER分析函数

 SELECT * 
 FROM
 ( SELECT name, 
    age, 
    zipcode,
    ROW_NUMBER() OVER          
    ( PARTITION by zipcode 
       order by age desc) 
    as seq
   ) T
  Where T.seq <=5

答案 1 :(得分:0)

SELECT *
FROM (
      SELECT *
           ,ROW_NUMBER() OVER (PARTITION BY zipcode ORDER BY Age DESC) rn
      FROM TableName
     )A
WHERE RN <= 5