数据库选取第N到第N+M条记录[2004年7月10日 20:03]

原创 2004年07月11日 04:07:00

原来没有遇上,倒是没认真考虑过这个问题。Sql Server适用

Record1
Record2
...
...
RecordN
...
...
RecordN+M
...
...

Result1:select top N+M from tableName order by Field1;/*Field1的顺序是表的顺序*/

Record1
Record2
...
...
RecordN
...
...
RecordN+M

Result2:select top M from Result1 order by Field1 desc;

RecordN+M
RecordN+M-1
...
...
RecordN

Result3:select * from Result2 order by Field2;

最后的语句是:select * from (select top M from (select top N+M from tableName order by Field1) order by Field1 desc) order by Field1;

2004-7-30补(下面Oracle 中适用):

这样做有一个问题,如果M是一个已经order by的语句,外层的order by 也有可能会破坏内层的order by ,所以需要加一层约束,Field1必须是内层order by 的第一个字段,经过简单测试,这是可以的,测试案例在后面。

另外一种获取N到N+M条记录的方法是:

SQL> select * from (select rownum as xfdgdf,tableName.* from tableName OriTable) where xfdgdf between N and N+M;

上面比正常需要的多出了一个字段xfdgdf,却是如何去掉呢??

SQL> select custid,custname from customer;

    CUSTID CUSTNAME
---------- --------------------
        35 444
        35 6666
       445 676
        35 aaa
        35 5555

SQL> select custid,custname from customer order by custid,custname;

    CUSTID CUSTNAME
---------- --------------------
        35 444
        35 5555
        35 6666
        35 aaa
       445 676

SQL> select * from (select * from (select custid,custname from customer order by
 custid,custname) order by custid desc) order by custid;

    CUSTID CUSTNAME
---------- --------------------
        35 444
        35 5555
        35 6666
        35 aaa
       445 676

7月31日补:

注:select * from tablename where rownum>10并不能如愿取出rownum在rownum后面的纪录

再到今天又发现另外一个的方法,不过没有测试,不知道效率比上面的方法效率有没有高一点,另外也没有解决多一个字段的问题。来自

http://blog.codelphi.com/progame/archive/2004/02/21/1456.aspx

Select rownum,* from MyTable where rownum<10
 minus
Select rownum,* from MyTable where rownum<5

这个方法比上面那个方法应该比较通用,在SQL server里也许能用类似的方法实现

Select top 10 * from MyTable 
 minus
Select top 5 * from MyTable

[oracle] rownum 及 选取排序后的前N条数据

 oracle sql rownum      在查询中,我们可以注意到,类似于“select xx from table where rownum 1)这样的查询是有正确含义的,...
  • lijianhe043
  • lijianhe043
  • 2014年12月30日 17:11
  • 10197

Postgresql查询每组的前N条记录

表结构如下, [sql] view plaincopy                Table "ytt.t1"    Column |      ...
  • a258831020
  • a258831020
  • 2015年09月16日 18:13
  • 3169

取Oracle中实现TOP N,选取前几条记录

例1:查询各个部门的MANAGER(经理)中谁的工资最低   hr select * from ( select t1.manager_id as 员工编号,t2.first_name as 员...
  • waysoflife
  • waysoflife
  • 2014年10月10日 19:37
  • 6467

SQLServer 维护脚本分享(03)数据库中记录CPU最近N分钟内的使用情况

(此脚本为网络参考,出处不详) DECLARE @ts_now bigint = (SELECT cpu_ticks/(cpu_ticks/ms_ticks) FROM sys.dm_os_sys...
  • kk185800961
  • kk185800961
  • 2015年01月25日 23:56
  • 970

CF-E218无LOGO无型号-150M-中文-9331-TD31-20DB-添加N25Q064A-ZC1.15EC-20150129

  • 2017年05月11日 20:00
  • 5.65MB
  • 下载

SQL/Oracle取出第 m 条到第 n 条记录的方法

SELECT * FROM              (                   SELECT 表名.*, ROWNUM AS CON FROM 表名 WHERE ROWNUM  ...
  • u012877177
  • u012877177
  • 2015年05月30日 16:46
  • 337

SQL/Oracle取出第 m 条到第 n 条记录的方法

用一句SQL取出第 m 条到第 n 条记录的方法 用一句SQL取出第 m 条到第 n 条记录的方法 从Table 表中取出第 m 条到第 n 条的记录:(Not In 版本) SELECT TO...
  • cjh200102
  • cjh200102
  • 2011年02月18日 08:38
  • 4720

hdu 3935 Dark Room 有n*m的灯,最少几次可以把所有的灯点亮,每次可点周围5个 m<=20

Problem Description One day Harry Potter came to a magic room, in which there are some shadow monst...
  • kongming_acm
  • kongming_acm
  • 2011年08月17日 13:09
  • 964

MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句 ---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N ---适

MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句 ---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LI...
  • Lxj12306
  • Lxj12306
  • 2017年12月04日 09:42
  • 308

打印从n个数中选取m个数的组合数

打印从n个数种选取m个数的组合数 方法一:利用递归思想。 //从后往前选取,选定位置i后,再在前i-1个里面选取m-1个。 //如 1 2 3 4 5 中选取 3 个 //1、选取5后,再在前...
  • wumuzi520
  • wumuzi520
  • 2012年10月18日 21:37
  • 16060
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据库选取第N到第N+M条记录[2004年7月10日 20:03]
举报原因:
原因补充:

(最多只允许输入30个字)