不明白,你这样的数据有意义吗?
既然group by了,那么怎么才算那个分组的前三条,我任意去三条你怎么去判断他不算“前”三

解决方案 »

  1.   

    select * from (
    select t.*,rank() over(partition by a,b,c order by col_num) rk from t) tb
    where tb.rk<=3;
      

  2.   

    如果Oracle数据库的版本是817及以上.
    可以使用分析函数来处理,如果版本较低,好像处理起来就比较麻烦了.
    select * from (
    select t.*,rank() over(partition by a,b,c order by col_num) rk from t) tb
    where tb.rk<=3;这条语句只能保证取出排名欠3名的用户, 如果有很多人并列前几名,这条语句就^_^如果确定只要前3挑记录, 可以考虑使用row_number 代替 rank来实现, 具体例子我就不举了.
      

  3.   

    select a.* from (
       select b.*,rank() over (partition a,b,c order by colname) rk  from tab)
    where rk<4;