从Table 表中取出第 m 条到第 n 条的记录:(Not In 版本)
SELECT TOP n-m+1 *
FROM Table
WHERE (id NOT IN (SELECT TOP m-1 id FROM Table ))
--从TABLE表中取出第m到n条记录 (Exists版本)
SELECT TOP n-m+1 * FROM TABLE AS a WHERE Not Exists
(Select * From (Select Top m-1 * From TABLE order by id) b Where b.id=a.id )
Order by id
--m为上标,n为下标,例如取出第8到12条记录,m=8,n=12,Table为表名
Select Top n-m+1 * From Table
Where Id>(Select Max(Id) From
(Select Top m-1 Id From Table Order By Id Asc) Temp)
Order By Id Asc
=====================================================================================================
在sql server 2005中提供了函数ROW_NUMBER() ,可以更方便的来实现
--按BirthDate排序,取第10条到20条的数据
SELECT BirthDate FROM
(
SELECT
ROW_NUMBER() OVER(ORDER BY BirthDate) AS a,BirthDate
FROM HumanResources.Employee
) AS a
WHERE a BETWEEN 10 AND 20
ROW_NUMBER()函数是Sql 2005中新添的一个函数。通常它被用在分页的SQL语句中。
微软官方的对此函数的描述是:返回结果集分区内行的序列号,每个分区的第一行从 1 开始。
我对此的理解:利用此函数可以为表中的某个字段建立序列,从1开始。就是说,根据已存在的某列,利用此函数可建立一新列,新列是数字,按照已存在列的顺序从1开始。
上边可能说的不是很清楚,请结合下边这个例子来看吧!
Code
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> 1USE Northwind
2GO
3
4--
5SELECT OrderID,
6 CustomerID,
7 OrderDate
8FROM dbo.Orders WITH(NOLOCK)
9
10SELECT OrderID,
11 CustomerID,
12 OrderDate,
13 ROW_NUMBER() OVER(ORDER BY orderID DESC) AS 字段编号
14FROM dbo.Orders WITH(NOLOCK)
第一个查询只是一个普通的查询,查询出Orders表中的3个字段的记录。其结果为:
第二个查询相比第一个查询仅仅是多了“ ROW_NUMBER() OVER(ORDER BY orderID DESC) AS 字段编号 ”这段语句。我们来分析一下这段语句。
这段语句的作用就是利用ROW_NUMBER()函数根据OrderID这列来生成一个新的数据列,这列的名称为字段编号。然后我们根据ORDER BY orderID DESC来指定字段编号这列按照OrderID的逆序来生成,结果如下:
比较两个结果集,会发现第二个结果集是按照OrderID字段逆序的记录,其实也可看成是字段编号这个字段的正序排序,ROW_NUMBER()函数相当于为SELECT语句末尾加了ORDER BY子句,第二个SELECT语句其实等价于:
Code
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1SELECT OrderID,
2 CustomerID,
3 OrderDate,
4 ROW_NUMBER() OVER(ORDER BY OrderID DESC) AS 字段编号
5FROM dbo.Orders WITH(NOLOCK)
6ORDER BY 字段编号ASC
下边来看一个对ROW_NUMBER()函数的简单分页应用。
Code
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> 1--Partition Page Demo
2/**//* 取出第- 200条的记录(记录须按OrderID排序)*/
3
4WITH OrdersByOrderIDASC AS
5(
6 SELECT OrderID,
7 CustomerID,
8 OrderDate,
9 ROW_NUMBER() OVER(ORDER BY orderID ASC) AS 字段编号
10 FROM dbo.Orders WITH(NOLOCK)
11)
12
13SELECT *
14FROM OrdersByOrderIDASC WITH(NOLOCK)
15WHERE 字段编号BETWEEN 100 AND 110
首先把应用ROW_NUMBER()函数后的结果集存在一张临时表中,然后以字段编号这个字段为条件,使用BETWEEN关键字过滤相应的记录。
分享到:
相关推荐
**方法一:** 使用`SELECT TOP m * FROM table_name WHERE id NOT IN (SELECT TOP n * FROM table_name)`这种方式可以有效地获取从第n+1条记录到第m条记录的数据。这种方法的基本思路是先通过`SELECT TOP n * FROM ...
SQL查找某记录的前后N条数据 SQL查找某记录的前后N条记录
SQL把一条记录金额平分到n个人并进行汇总.txt,这里说的是Access数据库中,如何将同一条记录金额平分到n个人里,金额会按照实际人数进行平分,空的则不平分,如:一条记录有三个营业员字段,但是实际不知道有几个...
SQL查询当前数据上一条和下一条的记录,管用,仅供参考!!!
### Access一次执行多条SQL语句 在Access数据库管理中,有时我们需要在同一事务中执行多条SQL语句来确保数据的一致性和完整性。例如,在更新某个记录后可能还需要执行其他操作,如增加日志记录等。本文将详细介绍...
如果需要查询特定范围内的记录,例如第N到M条,可以使用嵌套查询: ```sql SELECT TOP M * FROM ( SELECT TOP N * FROM table_name ORDER BY column_name ) AS subquery ORDER BY column_name DESC; ``` 其中,`...
SqlServer将多行记录按分组信息一行显示
SQL查找第n条开始的m条记录的方法: select top m * from table where id not in (select top n-1 id from table) temptable0) (注:表中必须有一个唯一值字段才可适用此方法。)
Oracle左连接返回多条记录中一条记录的查询语句,更具指定条件分组排序,返回各组中第一条记录
SQLServer 中将一个字段的多个记录值合并到一行显示的实现方法 SQL Server 是一种关系型数据库管理系统,具有强大的数据处理能力和存储能力。在实际应用中,我们经常需要将一个字段的多个记录值合并到一行显示,以...
打个比方你要查询每月排名前十的那些记录,或者每月销售前十的车辆。
Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(一) http://download.csdn.net/source/3268267 Oracle 11g SQL和PL SQL从入门到精通 pdf格式电子书 下载(二) ...
表:t_test -------------------------------------- id(int) cost(int) des Autoid(id) -------------------------------------- 1 10 aaaa 1 1 15 bbbb 2 1 20 cccc 3 ...取每一类id中cost最大的纪录
这里表示从第21条记录开始取10条记录。 #### Oracle 分页方法 Oracle 使用 `ROWNUM` 函数结合子查询来实现分页。 ```sql SELECT * FROM ( SELECT ROWNUM r, t1.* FROM book t1 WHERE ROWNUM < M + N ) t2 ...
第一部分 sql和pl/sql相关工具 第1章 在windows 平台上安装oracle database 11g 第2章 配置网络服务名 第3章 使用sql database 第4章 使用sql*plus 第二部分 sql 第5章 sql和pl/sql综述 第6章 简单查询 ...
但是,要获取第m条到第n条的数据,需要结合`WHERE`子句和`ORDER BY`子句,因为`TOP`关键字通常用于获取顶部的记录。例如,获取第10条到第30条记录的一种方法是: ```sql SELECT TOP 20 * FROM 表 WHERE id IN ...
这种方法的问题在于,它会先对整个表进行排序,然后返回第一条记录,对于百万级别的数据,这种做法可能导致显著的性能问题。 其次,改进的方法是使用子查询和`GROUP BY`来按用户ID分组,以获取每个用户最近的记录:...
1. **查询第M页,每页显示N条记录:** ```sql SELECT * FROM ( SELECT TOP (N) * FROM ( SELECT TOP (M + N - 1) * FROM <表名> ORDER BY <排序字段> DESC ) t1 ) t2 ORDER BY <排序字段> ASC; ``` **...
在Oracle数据库中,由于不直接支持SQL Server中的`SELECT TOP N`语法,我们需要采用其他方法来获取表中的前N条记录。以下是如何在Oracle中实现类似功能的详细步骤。 1. **基本方法:使用ROWNUM和ORDER BY** Oracle...