从oracle 10g数据库里查询出按每隔5记录选一条记录而且选出来的记录要有序,该怎么写请高手指教

解决方案 »

  1.   

    select * from tablename 
    where mod(rownum,5)=1
    order by columnname
      

  2.   

    select * from (select a.*,rownum rm from table_name a) where mod(rm,5)=0
    order by column
    這樣是沒有問題的!
    如果按照樓上的話,始終是一條紀錄
      

  3.   

    3楼的对,要改一下:mod(rm,6)=1就好了
    不过我还是想不通为什么 
    select * from tablename  where   mod(rownum,6)=1 
    就返回一条
      

  4.   

    可能你用*,它包括了ROWNUM,可以这样:
    insert into table_name select 字段列表(不要用*) from (select a.*,rownum rm from table_name a)where  mod(rm,6)=1
      

  5.   

    3楼的对,要改一下:mod(rm,6)=1就好了 
    不过我还是想不通为什么  
    select   *   from   tablename     where       mod(rownum,6)=1   
    就返回一条 
    因为rownum的特殊用法,这个sql只会返回一条,
    rownum的简单执行流程是这样的
    获得第一条记录,给rownum =1 第一条记录满足where 条件就返回了
    第二条记录 不满足条件,不返回 但是这里rownum 不会加    1
    就这样一直下去就rownum不会增加,where条件从来不满足,这语句只会返回1条记录
    可以试试 
    T@ora>select   *   from   a     where     rownum =2;no rows selectedElapsed: 00:00:00.00
    T@ora>select   *   from   a     where     rownum >1;no rows selectedElapsed: 00:00:00.00
    T@ora>
    是不会返回任何记录的