CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Oracle >  开发

select 语句征询,帮我写一个从一个表中取最新的10条记录的SQL,谢谢!

楼主zmg2000()2003-12-03 09:51:10 在 Oracle / 开发 提问

在SQL   SERVER   中用SELECT   TOP   。。。。。  
  不知道在ORACLE中怎么写 问题点数:0、回复次数:25Top

1 楼shanyuliang(良子)回复于 2003-12-03 10:01:13 得分 0

select   *   from   TableName   where   rownum<11;Top

2 楼zmg2000()回复于 2003-12-03 10:37:44 得分 0

我要的是最新的记录,你的语句只是选择了老数据。Top

3 楼neil2000(达达)回复于 2003-12-03 10:46:37 得分 0

那你是否有记录每条记录的生成日期和时间?Top

4 楼shanyuliang(良子)回复于 2003-12-03 11:01:26 得分 0

zmg2000(),在SQL   SERVER里面Select   Top……就能选出最新的??Top

5 楼leecooper0918(爱一个人好难)回复于 2003-12-03 11:03:36 得分 0

我想,加上order   by   ...   desc   子句就可以了  
   
      select   *   from   (select   *   from   table   order   by   col   desc)    
      where   rownum<11Top

6 楼letsflytogether(伍子)回复于 2003-12-03 11:18:32 得分 0

select   *   from   (select   *   from   table   order   by   时间字段/序列字段   desc)   a  
      where   rownum<11  
  Top

7 楼yansongonline(小嵩在线)回复于 2003-12-03 11:34:16 得分 0

(select   *   from   表名   where   rownum   <   (select   count(*)   +   1     from   表名))  
  minus  
  (select   *   from   表名   where   rownum   <   (select   count(*)   -   9   from   表名))  
  这样就可以取出来最新的10条记录了!Top

8 楼leexhwhy(南天一剑)回复于 2003-12-03 12:24:48 得分 0

select   *   from   (select   *   from   table   order   by   col   desc)    
      where   rownum<11  
   
   
  is   okTop

9 楼yansongonline(小嵩在线)回复于 2003-12-03 13:23:22 得分 0

to     leexhwhy(南天一剑)   :你的SQL语句是不是有错误啊!不能用order   by啊!请先测试后,在传SQL啊!Top

10 楼leecooper0918(爱一个人好难)回复于 2003-12-03 13:34:16 得分 0

to   楼上:  
        我写的语句和leexhwhy(南天一剑)是一样的,可以运行.  
        给你个测试结果:  
   
      SQL>   desc   worddefine;  
            IWORDID                                                             NOT   NULL   NUMBER(8)  
            CWORDTEXT                                                         NOT   NULL   VARCHAR2(200)  
            CSYMBOL                                                             VARCHAR2(100)  
            CWORDREF                                                           VARCHAR2(1024)  
   
      SQL>   select   count(*)   from   worddefine;  
                COUNT(*)  
  ----------  
          151124    
  Top

11 楼leecooper0918(爱一个人好难)回复于 2003-12-03 13:37:09 得分 0

接上面:  
        select   iWORDID   from   (select   *   from   worddefine   order   by   iWORDID   desc)    
      where   rownum<11  
   
        IWORDID          
        -------  
        151124                  
        151123  
        151122  
        151121  
        151120  
        151119  
        151118  
        151117  
        151116  
        151115Top

12 楼yansongonline(小嵩在线)回复于 2003-12-03 13:49:29 得分 0

to     leexhwhy(南天一剑)   :呵呵,我先开始是在ORACLE   7.3.4中运行的,所以有错误啊!  
  在8I和9I可以运行啊,呵呵!Top

13 楼wwl007(疑难杂症)回复于 2003-12-03 13:49:47 得分 0

你的oracle   版本太低了   可以使用  
  select   *   from   (select   *   from   table   group   by   col   desc)    
      where   rownum<11  
  Top

14 楼yansongonline(小嵩在线)回复于 2003-12-03 14:00:04 得分 0

经过测试,楼上SQL所耗时间大于  
  (select   *   from   表名   where   rownum   <   (select   count(*)   +   1     from   表名))  
  minus  
  (select   *   from   表名   where   rownum   <   (select   count(*)   -   9   from   表名))  
  ,所以还是按我的SQL运行比较好,呵呵!  
   
  Top

15 楼leecooper0918(爱一个人好难)回复于 2003-12-03 14:35:49 得分 0

to   yansongonline(小嵩在线)  
      我不知道你是怎么测试的,你的语句执行效率很低,你可以  
      看看查询计划.  
       
      你的查询很明显要做两次全表扫描,怎么可能效率高呢???  
  Top

16 楼cp430(旅程)回复于 2003-12-03 15:08:13 得分 0

select   a.*     from   (select   *   from   table_name   order   by   rowid   desc)   a   where   rownum<11Top

17 楼zgh2003(世纪飞扬)回复于 2003-12-03 15:16:57 得分 0

select   *   from   (select   *   from   students   order   by   rownum   desc)   where   rownum<5    
   
  Top

18 楼zgh2003(世纪飞扬)回复于 2003-12-03 15:18:05 得分 0

select   *   from   (select   *   from   table_name   order   by   rownum   desc)   where   rownum<11    
  Top

19 楼yujiabian(流氓兔子雨)回复于 2003-12-03 15:56:03 得分 0

to   yansongonline(小嵩在线),还是公平点说话,你的方案根本不敢实施,你知道你的这种全表扫描的时间是多少,1分零7秒,我自己的一个比较大的表,所以我还是觉得如下实现比较好一点  
  select   *   from   (select   *   from   table   order   by   rowid   desc)  
      where   rownum<11  
  Top

20 楼yansongonline(小嵩在线)回复于 2003-12-03 16:34:18 得分 0

to   leecooper0918(PajeroFans)     and   yujiabian(流氓兔子雨):不好意思,我先开始测试用的是一张小表,我现在又用了一张4万条记录的大表,果然速度不一样!支持你们的SQL,俺的那个SQL还是效率低了点啊!呵呵!Top

21 楼zgh2003(世纪飞扬)回复于 2003-12-03 16:59:52 得分 0

呵呵,试试  
  select   *   from    
  (select   *   from   table_name   order   by   rownum   desc)    
  where   rownum<11   吧!  
  刚才我还以为写错了呢!所以我又测试了一遍,没问题的。  
  因为rownum实际的记录返回值跟序列差不多。  
  请看下面的测试:  
  SQL>   desc   rooms;  
  Name                   Type                   Nullable   Default   Comments    
  ------------   ------------   --------   -------   --------    
  ROOM_ID             NUMBER(5)         Y                                                    
  BUILDING           VARCHAR2(15)   Y                                                    
  ROOM_NUMBER     NUMBER(4)         Y                                                    
  NUMBER_SEATS   NUMBER(4)         Y                                                    
  DESCRIPTION     VARCHAR2(50)   Y                                                    
   
  SQL>   select   *   from   rooms;  
   
  ROOM_ID   BUILDING                 ROOM_NUMBER   NUMBER_SEATS   DESCRIPTION  
  -------   ---------------   -----------   ------------   --------------------------------------------------  
      99999   Building   7                             310                   1000   Large   Lecture   Hall  
      99998   Building   6                             101                     500   Small   Lecture   Hall  
      99997   Building   6                             150                       50   Discussion   Room   A  
      99996   Building   6                             160                       50   Discussion   Room   B  
      99995   Building   6                             170                       50   Discussion   Room   C  
      99994   Music   Building                     100                       10   Music   Practice   Room  
      99993   Music   Building                     200                   1000   Concert   Room  
      99992   Building   7                             300                       75   Discussion   Room   D  
      99991   Building   7                             310                       50   Discussion   Room   E  
   
  9   rows   selected  
   
  SQL>   select   rownum,aa.*   from   rooms   aa;  
   
          ROWNUM   ROOM_ID   BUILDING                 ROOM_NUMBER   NUMBER_SEATS   DESCRIPTION  
  ----------   -------   ---------------   -----------   ------------   --------------------------------------------------  
                    1       99999   Building   7                             310                   1000   Large   Lecture   Hall  
                    2       99998   Building   6                             101                     500   Small   Lecture   Hall  
                    3       99997   Building   6                             150                       50   Discussion   Room   A  
                    4       99996   Building   6                             160                       50   Discussion   Room   B  
                    5       99995   Building   6                             170                       50   Discussion   Room   C  
                    6       99994   Music   Building                     100                       10   Music   Practice   Room  
                    7       99993   Music   Building                     200                   1000   Concert   Room  
                    8       99992   Building   7                             300                       75   Discussion   Room   D  
                    9       99991   Building   7                             310                       50   Discussion   Room   E  
   
  9   rows   selected  
   
  SQL>   desc   students;  
  Name                         Type                   Nullable   Default   Comments    
  ---------------   ------------   --------   -------   --------    
  ID                             NUMBER(5)         Y                                                    
  FIRST_NAME             VARCHAR2(20)   Y                                                    
  LAST_NAME               VARCHAR2(20)   Y                                                    
  MAJOR                       VARCHAR2(30)   Y                                                    
  CURRENT_CREDITS   NUMBER(3)         Y                                                    
   
  SQL>   select   *   from   students;  
   
          ID   FIRST_NAME                       LAST_NAME                         MAJOR                                                     CURRENT_CREDITS  
  ------   --------------------   --------------------   ------------------------------   ---------------  
    10000   Scott                                 Smith                                 Computer   Science                                                           0  
    10003   Margaret                           Mason                                 History                                                                             0  
    10004   Joanne                               Junebug                             Computer   Science                                                           0  
    10005   Manish                               Murgratroid                     Economics                                                                         0  
    10006   Patrick                             Poll                                   History                                                                             0  
    10007   Timothy                             Taller                               History                                                                             0  
    10008   Barbara                             Blues                                 Economics                                                                         0  
    10009   David                                 Dinsmore                           Music                                                                                 0  
    10010   Ester                                 Elegant                             Nutrition                                                                         0  
    10011   Rose                                   Riznit                               Music                                                                                 0  
    10012   Rita                                   Razmataz                           Nutrition                                                                         0  
   
  11   rows   selected  
   
  SQL>   select   rownum,aa.*   from   students   aa;  
   
          ROWNUM           ID   FIRST_NAME                       LAST_NAME                         MAJOR                                                     CURRENT_CREDITS  
  ----------   ------   --------------------   --------------------   ------------------------------   ---------------  
                    1     10000   Scott                                 Smith                                 Computer   Science                                                           0  
                    2     10003   Margaret                           Mason                                 History                                                                             0  
                    3     10004   Joanne                               Junebug                             Computer   Science                                                           0  
                    4     10005   Manish                               Murgratroid                     Economics                                                                         0  
                    5     10006   Patrick                             Poll                                   History                                                                             0  
                    6     10007   Timothy                             Taller                               History                                                                             0  
                    7     10008   Barbara                             Blues                                 Economics                                                                         0  
                    8     10009   David                                 Dinsmore                           Music                                                                                 0  
                    9     10010   Ester                                 Elegant                             Nutrition                                                                         0  
                  10     10011   Rose                                   Riznit                               Music                                                                                 0  
                  11     10012   Rita                                   Razmataz                           Nutrition                                                                         0  
   
  11   rows   selected  
  Top

22 楼black_snail(●男人要忍○)回复于 2003-12-03 17:13:03 得分 0

http://www.csdn.net/develop/read_article.asp?id=21371Top

23 楼bunnysky(松鼠)回复于 2003-12-03 18:09:54 得分 0

试一下ROWID伪列呀!这个值是有先后大小之分的!Top

24 楼leecooper0918(爱一个人好难)回复于 2003-12-03 18:30:02 得分 0

比较喜欢这样的讨论气氛,大家都拿出自己的方案,然后用  
  事实来说话.  
  Top

25 楼zmg2000()回复于 2003-12-04 10:26:16 得分 0

谢谢大家Top

相关问题

  • 请教插入记录的sql语句
  • Sql语句错误:记录过大
  • 批量删除记录SQL语句。
  • SQL语句问题,有相同记录
  • 关于SQL语句的记录
  • 如何得到n条记录以后的记录集(请用sql语句)
  • 执行插入记录的SQL语句是否可以返回记录吗?
  • 用sql语句查询 为什么记录集中总是没有记录?
  • sql 语句 ,如何取出相同记录中的第一条记录
  • SQL语句,怎么选择从第11条记录到第20条记录

关键词

  • sql
  • room
  • iwordid
  • worddefine
  • building
  • discussion
  • seats
  • rownum
  • varchar2
  • number

得分解答快速导航

  • 帖主:zmg2000

相关链接

  • Oracle类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo