where rownum < $beginid order by id desc
是先执行where,再order by的。

解决方案 »

  1.   

    bobfang(匆匆过客) :
    对不起,我不太明白你的意思,愿听详讲……
      

  2.   

    比如你的数据是ID : 1 , 3 ,4 , 2
    select ID from tab1 where rownum <= 3 order by id desc
    你也许想得到
        4 , 3 , 2这样的结果, 但是实际情况是  4 , 3 ,`1
     
      因为ORACLE 先用rownum 限定记录,在这个基础上进行排序.  Is this clear ?
      

  3.   

    比如你的数据是ID : 1 , 3 ,4 , 2
    select ID from tab1 where rownum <= 3 order by id desc
    你也许想得到
        4 , 3 , 2这样的结果, 但是实际情况是  4 , 3 ,`1
     
      因为ORACLE 先用rownum 限定记录,在这个基础上进行排序.  Is this clear ?
      

  4.   

    所以用这个可以(有点笨)
     select * from ( select rownum con ,ID from ( select id from t2 order by ID)) where con <=5
      

  5.   

    select * from (select table.*, rownum ron from table order by id desc) where ron > $endid and ron < $beginid
      

  6.   

    agree black_snail(●龙飞虎○)