我现在有这么一个需求,
数据库中原始记录
用户id   积分
1        10
1        20
1        30
1        80
2        10
2        30
3        50
3        60
3        70
3        80但是只显示给用户
用户id   积分
1        10
1        20
1        30
2        10
2        30
3        50
3        60
3        70也就是说原始数据按“用户id”来区分,大与3条的只显示3条(显示哪3条随便),小与3条的就全部显示。

解决方案 »

  1.   

    select 用户id,积分 from (select 用户id,积分,rank() over(partition by 用户id order by rowid) r from table1 ) where r<=3;
      

  2.   

    不要用rank()
    要用row_number()
      

  3.   

    刚才着急问题没列全。
    再问高手们一下,要是我还有一个列 type
    用户id   积分 type
    1        10    1
    1        20    1
    1        30    2
    2        10    2
    2        30    3
    3        50    3
    3        60    4
    3        70    4 
    跟据条件 type 的值来定 取多少列,如 type=1 的 最多 3列,type=1 最多 2列。
    这个怎么实现呢?请高手没赐教,小弟新来分不多,请谅解
      

  4.   

    select 用户id,积分 from (select 用户id,积分,rank() over(partition by 用户id order by rowid) r,type from table1 ) where r<=decode(type, '1', 3, ...);
      

  5.   

    select tt.用户id,tt.积分
      from (
            select tn.用户id,tn.积分,tn.type,row_number() over(partition by tn.用户id order by tn.积分) rn
              from tablename tn
           )tt
     where tt.rn < decode(tt.type,1,3,...);
      

  6.   

    用rank是不对的,得用row_number()