在Oracle中,取最后50条记录的SQL语法怎么写,或有没有其它的实现方法(100分)

  • 主题发起人 主题发起人 hyhy
  • 开始时间 开始时间
H

hyhy

Unregistered / Unconfirmed
GUEST, unregistred user!
目前我在开发一个程序,在一个表中录入有A、B、C、D等分类记录,
由于特殊,没有其它过滤条件,只要求取最后录入的50条记录显示,
例如选择B大类时,只显示B大类的最后50条记录,数据录入时没有
一定的顺序,几类数据是相互交叠录入的,好象在SQLServer中可以
用'select bottom '的语法实现,在Oracle中有没有实现的方法?
 
在oracle中有rownum可以使用,例如取前5条记录可以
select * from tab where rownum <6;
如果取后几条的话我能想的一个较苯的办法是先建立个view
如:create or replace view v_tab as select * from tab order by rownum DESC;
然后 select * from v_tab where rownum < 50;
 

select top 50 * from table where 类型=b大类 order by b大类 desc
所谓前就是后,后就是前
 
对啦,改下order就是了
不过如果要取中间的记录好象就比较麻烦了
 
to timerri:
top 的用法在oracle 有吗?
 
dudajiang的方法可以借鉴,我是开发Corba三层的,里头有主从表关联更新,最好有一个
更高效的解决方法。
再保留三天,看看有没有更好的方法,不然分就都送给dudajiang了。
 
oracle中有rownum最好实现它了!
其实不一定用视图;
先用语句查出记录总和COUNT(*),
而后查询‘select * from tab where rownum>'+INTTOSTR(count-50)
 
在oracle中当然是用rownum来实现是最好了!
1、可以用一个子查询来实现:
select tname from
(select tname from tab where tname like 'A%' order by tname desc)
where rownum<50
(其中select * from tab where tname like 'A%' order by tname desc
降序排列的结果中的前50个就是你要的数据)
2、可用另一个方法:
select count(tname) a from tab where tname like 'A%’得到A(所有记录)
如果A>50:
select * from tab where tname like 'A%’
minus select * from tab where tname like 'A%’and rownum<a-50
A<50:
select * from tab where tname like 'A%’and rownum<a-50

 
to 王:
在oracle中,rownum的用法并不像你想的那样,where rownum > 50的用法就不对!
to feier_jun
hyhy说: 没有其它过滤条件 ! 就不能用
select tname from
(select tname from tab where tname like 'A%' order by tname desc)
的排序方法!
 
呵呵,是我错.....
rownum怎么用?内置的?
 
王和timerri的方法都是错的,
谢谢dudajiang、feier_jun
 
后退
顶部