select * from (select * from tb order by rowid desc ) t where rownum<=50;

解决方案 »

  1.   

    bzszp(SongZip)大哥的是查出了最后50条,如果再按照原始顺序显示,在后面再加上order by rowid即可,不过 bzszp(SongZip)大哥的思维真强,不愧为这里的斑竹,强。
      

  2.   

    为什么我在805中执行这句话提示                     
    错误位于第1行:
    ORA-00907: 缺少右括号
      

  3.   

    order by rowid 不能确定取出来的数据的顺序, rowid只是表明数据在oracle中的存储位置, 不能表明数据插入数据库的时间先后.在同一个数据块中的记录可能能够保证.AAA6Xi AAr AADDmm AAO
    前六位为对应的object_id AAA6Xi 
    7-9位为file_no          AAr 
    10-15位为block_no       AADDmm 
    16-18位为row_number     AAO
      

  4.   

    我在ora73中执行这句话也提示                     
    错误位于第1行:
    ORA-00907: 缺少右括号
      

  5.   

    不是rowid,我感觉应该是rownum吧!
    select * from (
       select * from (
          select a.*,rownum as rowno from tab ) order by rowno desc )
      ) where rowno<51 order by rowno ;
      

  6.   

    斑竹厉害!!我第一想法也是用rownum,看了之后知道斑竹的方法真直观。rownum可以查,但效率低多了,多了一层嵌套。
      

  7.   

    不过刚才测试了一下,似乎还是不能用rowid因为在发生了删除操作后,rowid可以被重用,那么不能保证最后插入的数据的rowid是最大的。所以还是得用rownum来控制了,也只好再多一层嵌套。
      

  8.   

    不能用rowid,数据的存储不是有序的。
    用rownum
    select * from (select * from (select rownum rn,a.* from table_name a) order by rn desc) where rn<=50;
      

  9.   

    最好字段mdseno是个主键,并有唯一索引,这样速度会很快的
    select * from (select * from sbda_psmdpydt order by mdseno desc) where rownum<10;
      

  10.   

    支持用rownum,因为谁也不知道作者要求select出来的语句是什么样子的(或者有排序、分组等操作),并且如果select出来的记录在rowid上不一定递增的时候会有问题。斑竹的例子应该是理想情况下的且效率较好,针对具体问题还是得区别对待吧.欢迎大家反驳我!谢~
      

  11.   

    楼主要求的是按照数据库原始数据排列,并没有说是插入顺序,所以,可以用rowid来排序。如果要按插入顺序排列,用rowid自然是不可以的,也没有现成的办法,只有增加一个插入时间的列用来保存插入时间。select * from (select * from tb order by rowid desc ) t where rownum<=50 order by rowid;这个应该是符合楼主意思的SQL了吧
      

  12.   

    同意楼上意见
    要按插入顺序排列,只有增加插入时间的列用来保存插入时间(如rec_date)
    select * from (select * from tablename order by rec_date desc) where rowum <=50;
    同样要查询最后插入10条前的50条记录如下:
    select *  from (select * from (select * from tablename order by rec_date desc) where rowum <=60 order by rownum desc) where rownum < 10;
      

  13.   

    order by rowid 是不可取的,也许你刚插入一些数据时感觉是分配的有序的块给你
    但是一旦你的数据库里面有一定的数据删除或几次插入隔一定的时间,你就会发现分配的数据块和前面的已经不再连续,甚至可能后分的数据快在已有的数据块的前面,这样ROWID的大小顺序已经不可以在表示出数据插入的顺序了。要按原始数据排序,还是加个排序的时间字段吧.