楼上说的对select a,b 
from (select a,b,rownum from tablea order by rownum desc)
where rownum < 100

解决方案 »

  1.   

    把二楼的再改一下
    select a,b 
    from (select a,b,rownum from tablea order by rownum desc)
    where rownum < 100 order by asc
    就是正顺了
      

  2.   

    呵呵……有点好笑,原因?请看我解释:
    首先我不清楚楼主想表达什么问题,到底是返回的数据的最后100条,还是表中的最后生成的100条记录??如果是前者,上面的就是答案了,如果是后者嘛,我想,上面的就不正确了。
    ROWNUM是什么东西啊?ROWNUM是表里的数据没有任何关系,跟ROWID是两码事,我搞不懂为什么会想到用ROWNUM作为排序字段。ORACLE的SQL引擎接收到一条SQL语句的时候,会自动判断用何种计划来检索数据。SQL引擎如果发现所需要SELECT的字段里,没有任何字段建有INDEX的话,引擎会随机在“块”中读出数据(这个随机并不是我们平常说的,是有区别的,我就不加解释了)。在这种情况下,如果数据量很多的情况下,相同的SQL语句,返回的数据,是并不相同的(记录排序)。而ORACLE在返回数据的同时,会给每条记录,自动添加一个伪列,这个伪列就是ROWNUM了。我前面也说了,ROWNUM跟ROWID是完全不同的两回事,ROWID是在物理上标示块中的每条记录的,而对数据的增、删、改,就是靠ROWID来定位数据的。这就是为什么一般情况下,SELECT出来的记录集,是不能进行增、删、改的原因。
    所以用ROWNUM来排序,同一条SQL,得到的数据,有可能不一样。如果这种情况,楼主可以接受的话,用ROWNUM来排序,是完全没问题的,但我认为是不是最后100条记录,就完全没意义了。
    我建议在SELECT的时候,在SELECT里的某个合适的字段,做REVERSE INDEX就行了。你的情况,应该把记录的生成时间作为这个REVERSE INDEX字段。