select * from 
(select t.*,rank() over(partition by a order by b desc) rk from tbname t) tt
where tt.rk<3;orselect * from 
(select t.*,row_number() over(partition by a order by b desc) rk from tbname t) tt
where tt.rk<3;注意上面两种写法有区别,根据实际情况选用一种。

解决方案 »

  1.   

    select * from 
    (select t.*,rank() over(partition by a order by b desc) rk from tbname t) tt
    where tt.rk<3;
      

  2.   

    为什么我在运行上面的代码的时候出现了这样的问题?
    系统提示:
      错误位于第1行:
      ORA-OO439:未启用特征:OLAP Window Functions
      

  3.   

    呵呵,不支持分析函数。
    这样的话就比较复杂了。
    try:
    select * from 
    tbname t
    where (select count(*) from tbname tt where t.a=tt.a and tt.b>t.b)<2;
      

  4.   

    执行select * from v$option where PARAMETER='OLAP Window Functions';是否为true,false的话则没有安装,不能用分析函数,单独安装也可以
      

  5.   

    厉害啊, bzszp(SongZip)
    真是太厉害了,好了,问题解决了
    但是我还是不明白,为什么我的系统不支持分析函数呢?
      

  6.   

    对,是false
    那该怎样安装呢?到哪里找这个东西呢?
      

  7.   

    好的,谢谢ZMGOWIN了
    回见
    同样也谢谢BZSZP
      

  8.   

    oracle9i以上版本才有分析函数
      

  9.   

    to :bzszp(SongZip) 
        谢谢!!