select *
  from (select row_number() over(partition by id order by exscore desc) lev,
               *
          from table1
  )
 where lev = 1
 order by id desc我这样可以把每组的第一条记录取出来,可是我还想把每组有几条记录取出来,该怎么取呢?

解决方案 »

  1.   

    select * 
      from (select row_number() over(partition by id order by exscore desc) lev, 
                  * 
              from table1 
      ) 
    where lev < 5
    order by id desc 
      

  2.   

    select * 
      from (select row_number() over(partition by id order by exscore desc) lev,
            count(*) over(partition by id)  cnt
                  * 
              from table1 
      ) 
    where lev = 1 
    order by id desc