CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  应用实例

如何在查询结果集里取第N到第N+7行的数据

楼主zhuhailian(zhelern)2004-08-03 20:18:51 在 MS-SQL Server / 应用实例 提问

按时间排序后想取第4到第10行的记录,如何取?不通过编号取,oracle里有row_number()函数,不知道MS-SQL   Server是否有这样的函数。 问题点数:50、回复次数:15Top

1 楼FBug(花知)回复于 2004-08-03 20:35:29 得分 5

我有一个笨方法。不要笑我(以前我就是这么做的)...但不是用函数的。  
   
  SELECT   TOP   (10   -   4   +   1)   *    
  FROM   (SELECT   top   10   *   FROM   (   RES_RECORD   )ORDER   BY     ??   ASC)  
  ORDER   BY   ??   DESCTop

2 楼rea1gz(冒牌realgz V0.4)回复于 2004-08-03 20:37:13 得分 5

select   ...,IDENTITY(int,1,1)   as   idnew   into   #t   from   ...  
   
  select   *   from   #t   where   idnew   between   4   and   10  
   
  drop   table   #t  
  Top

3 楼FBug(花知)回复于 2004-08-03 20:40:10 得分 0

TO     冒牌realgz   (呵呵,)  
   
  那个   #t是什么意思   ?  
   
  是不是临时的一个表.  
  最后又丢弃了。..Top

4 楼rouqu(石林#黄果树)回复于 2004-08-03 20:54:56 得分 0

#   --局部临时表  
   
  to:rea1gz(冒牌realgz   V0.1)   人家说了   不想通过编号取哦  
  Top

5 楼zjmym(缘木)回复于 2004-08-03 20:55:40 得分 5

SELECT   TOP   (10   -   4   +   1)   *    
  FROM   (SELECT   top   10   *   FROM   (   RES_RECORD   )ORDER   BY     ??   ASC)  
  ORDER   BY   ??   DESC  
  就可以Top

6 楼lzymagi(逸)回复于 2004-08-03 21:20:38 得分 5

最笨的方法:  
  select   top   (10-4+1)   from    
  (select   top   10   from   bable)   order   by   datetime   desc  
   
  desc要与不要就是你由排序定的了Top

7 楼walkonthesky(★★★★★)回复于 2004-08-04 10:10:30 得分 0

利用排序转换,好思路Top

8 楼xikboy(狼面书生)回复于 2004-08-04 12:09:39 得分 5

select   top   7   *   from   #T   where   rq   not   in   (select   top   6   rq   from   #T   )   order   by   rq   ascTop

9 楼walkonthesky(★★★★★)回复于 2004-08-04 13:42:49 得分 5

楼上的不符合条件  
   
  因为没有给出数据库的字段  
  Top

10 楼FLandY1982(匡浩)回复于 2004-08-04 14:33:46 得分 5

to   FBug(花知)   :  
  SELECT   TOP   (10   -   4   +   1)   *    
  FROM   (SELECT   top   10   *   FROM   (   RES_RECORD   )ORDER   BY     ??   ASC)  
  ORDER   BY   ??   DESC  
   
   
  --按照   ??   排序不行啊     例如   ??的TOP10字段内容为   1119395679   不就有问题了吗   只有??字段为IDENTITY才行吧  
  Top

11 楼hachongzi(虫子)回复于 2004-08-04 15:19:57 得分 0

select   topTop

12 楼rouqu(石林#黄果树)回复于 2004-08-04 17:35:22 得分 10

--建立测试表  
  create   table   st1(  
  logdate   smalldatetime,  
  comment   varchar(20)  
  )  
  --插入测试数据  
  insert   into   st1   values('20040804','first')  
  insert   into   st1   values('20040804','second')  
  insert   into   st1   values('20040804','third')  
  insert   into   st1   values('20040804','fourth')  
  insert   into   st1   values('20040804','fifth')  
  insert   into   st1   values('20040804','sixth')  
  insert   into   st1   values('20040804','seven')  
  insert   into   st1   values('20040804','eighth')  
  insert   into   st1   values('20040804','ninth')  
  insert   into   st1   values('20040804','tenth')  
  insert   into   st1   values('20040804','eleventh')  
   
  --进行运算处理  
  select   top   10   *   into   #tem1   from   st1   order   by   logdate   asc  
  select   top   7   *   into   #tem2   from   #tem1   order   by   logdate   desc  
  select   *   from   #tem2   order   by   logdate   asc  
   
  --结果  
  20040804 fourth  
  20040804 fifth  
  20040804 sixth  
  20040804 seven  
  20040804 eighth  
  20040804 ninth  
  20040804 tenth  
   
  结果是对的  
  Top

13 楼rouqu(石林#黄果树)回复于 2004-08-04 17:38:41 得分 0

不过做了个测试   有个问题想不通了  
  select   *   from   st1   order   by   logdate   asc   结果是  
  logdate     comment                              
  --------   --------------------    
  20040804   first  
  20040804   second  
  20040804   third  
  20040804   fourth  
  20040804   fifth  
  20040804   sixth  
  20040804   seven  
  20040804   eighth  
  20040804   ninth  
  20040804   tenth  
  20040804   eleventh  
   
  (11   row(s)   affected)  
   
  然而select   top   10   *   from   st1   order   by   logdate   asc   结果却是  
  logdate     comment                              
  --------   --------------------    
  20040804   eleventh  
  20040804   tenth  
  20040804   ninth  
  20040804   eighth  
  20040804   seven  
  20040804   sixth  
  20040804   fifth  
  20040804   fourth  
  20040804   third  
  20040804   second  
   
  (10   row(s)   affected)  
   
  谁解释一下?Top

14 楼FBug(花知)回复于 2004-08-05 12:01:00 得分 5

Re   :   FLandY1982(升级基本靠散分!!)    
   
  是的。是有条件。  
  但也不一定要   ideneity  
   
  他的条件是必须能明确的选出   这n条记录。  
  如果一个ORDER不能确定。。那再加。。到能确定是哪n条为止。  
   
  没必要钻这种牛角尖。思想正确了就ok了。完全可以通过简单修改来实现。Top

15 楼rouqu(石林#黄果树)回复于 2004-08-05 12:06:53 得分 0

同意楼上Top

相关问题

  • 数据查询导行条的问题。
  • 能用xml进行数据查询吗
  • 数据查询
  • 数据查询
  • 数据查询
  • 数据查询
  • 在三层数据库里怎样进行数据查询?
  • 数据表有个DateTime字段,如何用SQL语句查询前n天,或者前n月、年的数据?
  • 执行查询时取不到数据,结果发现表被锁,如何获得表被锁的信息并让该操作等待N秒?(Informix DB)
  • 数据查询(vb)

关键词

  • 字段
  • 函数
  • top
  • 测试
  • st1
  • logdate
  • tem
  • asc
  • insert
  • rq

得分解答快速导航

  • 帖主:zhuhailian
  • FBug
  • rea1gz
  • zjmym
  • lzymagi
  • xikboy
  • walkonthesky
  • FLandY1982
  • rouqu
  • FBug

相关链接

  • SQL Server类图书

广告也精彩

反馈

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