前几行的数据可以用SELECT *
  FROM (SELECT   col_1, col_2
            FROM my_table
        ORDER BY col_1)
 WHERE ROWNUM < 35假如我有67条记录,后34行的数据应该怎样取得?是在排序的情况下如果不用rownum有其他的方法可以取到吗?

解决方案 »

  1.   

    select col_1, col_2
    from 
    (SELECT  rownum as account, col_1, col_2
                FROM my_table
            ORDER BY col_1) a 
    where account>34
    看看行不行
      

  2.   

    SELECT *
      FROM (SELECT   col_1, col_2
                FROM my_table
            ORDER BY col_1)
     WHERE ROWNUM < 67
    minus
    SELECT *
      FROM (SELECT   col_1, col_2
                FROM my_table
            ORDER BY col_1)
     WHERE ROWNUM < 33
      

  3.   

    类似select * from(
    select a.*,row_number() over(order by object_id) as rn from dba_objects a
    )where rn>64 and rn<=100
      

  4.   

     CREATE TABLE MG_CONT AS
        SELECT SYSDATE + LEVEL CONTRACT_ST_DATE FROM DUAL CONNECT BY LEVEL < 68;
        
     select * from ( select CONTRACT_ST_DATE,rownum rn from  mg_cont) where rn>34
      

  5.   


    这个思路不错啊!~ 我没想到,再变通一下:既然是减集上面就不用子查询来排序了
    SELECT col_1, col_2
      FROM my_table
    MINUS
    SELECT *
      FROM (SELECT   col_1, col_2
                FROM my_table
            ORDER BY col_1)
     WHERE ROWNUM <= 34
      

  6.   

    select * from ( select CONTRACT_ST_DATE,rownum rn from  mg_cont  where rownum<35 order by CONTRACT_ST_DATE desc) order by rn
      

  7.   


    谢谢,好方法!只想到用序列,没想到用函数,这里的row_number() over得出的应该是一个查询出来的真实数据列,然后再来自查询。学习了! 自己写个SELECT *
      FROM (SELECT col_1, col_2, ROW_NUMBER () OVER (ORDER BY col_1) AS rn
              FROM my_table)
     WHERE rn > 34
      

  8.   


    这位写的我看不太懂,不会出现先rownum还是先order by的问题吗?
      

  9.   

    SQL>  CREATE TABLE MG_CONT AS
      2      SELECT SYSDATE + LEVEL CONTRACT_ST_DATE FROM DUAL CONNECT BY LEVEL < 68;表已创建。
    SQL> col conract_st_da format A20
    SQL> select * from mg_cont
      2  /CONTRACT_ST_DA
    --------------
    04-2月 -09
    05-2月 -09
    06-2月 -09
    07-2月 -09
    08-2月 -09
    09-2月 -09
    10-2月 -09
    11-2月 -09
    12-2月 -09
    13-2月 -09
    14-2月 -09CONTRACT_ST_DA
    --------------
    15-2月 -09
    16-2月 -09
    17-2月 -09
    18-2月 -09
    19-2月 -09
    20-2月 -09
    21-2月 -09
    22-2月 -09
    23-2月 -09
    24-2月 -09
    25-2月 -09CONTRACT_ST_DA
    --------------
    26-2月 -09
    27-2月 -09
    28-2月 -09
    01-3月 -09
    02-3月 -09
    03-3月 -09
    04-3月 -09
    05-3月 -09
    06-3月 -09
    07-3月 -09
    08-3月 -09CONTRACT_ST_DA
    --------------
    09-3月 -09
    10-3月 -09
    11-3月 -09
    12-3月 -09
    13-3月 -09
    14-3月 -09
    15-3月 -09
    16-3月 -09
    17-3月 -09
    18-3月 -09
    19-3月 -09CONTRACT_ST_DA
    --------------
    20-3月 -09
    21-3月 -09
    22-3月 -09
    23-3月 -09
    24-3月 -09
    25-3月 -09
    26-3月 -09
    27-3月 -09
    28-3月 -09
    29-3月 -09
    30-3月 -09CONTRACT_ST_DA
    --------------
    31-3月 -09
    01-4月 -09
    02-4月 -09
    03-4月 -09
    04-4月 -09
    05-4月 -09
    06-4月 -09
    07-4月 -09
    08-4月 -09
    09-4月 -09
    10-4月 -09CONTRACT_ST_DA
    --------------
    11-4月 -09已选择67行。SQL>  select * from ( select CONTRACT_ST_DATE,rownum rn 
    RACT_ST_DATE desc) order by rn
      2  /CONTRACT_ST_DA         RN
    -------------- ----------
    04-2月 -09              1
    05-2月 -09              2
    06-2月 -09              3
    07-2月 -09              4
    08-2月 -09              5
    09-2月 -09              6
    10-2月 -09              7
    11-2月 -09              8
    12-2月 -09              9
    13-2月 -09             10
    14-2月 -09             11CONTRACT_ST_DA         RN
    -------------- ----------
    15-2月 -09             12
    16-2月 -09             13
    17-2月 -09             14
    18-2月 -09             15
    19-2月 -09             16
    20-2月 -09             17
    21-2月 -09             18
    22-2月 -09             19
    23-2月 -09             20
    24-2月 -09             21
    25-2月 -09             22CONTRACT_ST_DA         RN
    -------------- ----------
    26-2月 -09             23
    27-2月 -09             24
    28-2月 -09             25
    01-3月 -09             26
    02-3月 -09             27
    03-3月 -09             28
    04-3月 -09             29
    05-3月 -09             30
    06-3月 -09             31
    07-3月 -09             32
    08-3月 -09             33CONTRACT_ST_DA         RN
    -------------- ----------
    09-3月 -09             34已选择34行。SQL>