rt,好像只能where rownum<数字 order by 排序的列
高手们有没有什么方法啊?

解决方案 »

  1.   

    --使用子查询
    select * from (select * from t order by col1) where rownum<10;
      

  2.   


    --使用rownum,但是rownum只能是<,<= 
    scott@YPCOST> select * from (select * from emp order by sal desc) where rownum<=3;     EMPNO ENAME      JOB              MGR HIREDATE                   SAL       COMM     DEPTNO
    ---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
          7839 KING       PRESIDENT            1981-11-17 00:00:00       5000                    10
          7788 SCOTT      ANALYST         7566 1987-04-19 00:00:00       3000        900         20
          7902 FORD       ANALYST         7566 1981-12-03 00:00:00       3000        900         20--或者使用分析函数,这样就可以查询工资排名3到6位的
    已写入 file afiedt.buf  1  select * from (select t.*,row_number() over(order by sal desc) rn from emp t)
      2* where rn between 3 and 6
    scott@YPCOST> /     EMPNO ENAME      JOB              MGR HIREDATE                   SAL       COMM     DEPTNO         RN
    ---------- ---------- --------- ---------- ------------------- ---------- ---------- ---------- ----
          7902 FORD       ANALYST         7566 1981-12-03 00:00:00       3000        900         20          3
          7566 JONES      MANAGER         7839 1981-04-02 00:00:00       2975        900         20          4
          7698 BLAKE      MANAGER         7839 1981-05-01 00:00:00       2850                    30          5
          7782 CLARK      MANAGER         7839 1981-06-09 00:00:00       2450                    10          6