2010-06-14 76 views

回答

6

如果您使用的是MS SQL Server,那么row_number()函数可用。

例子:

USE AdventureWorks2008R2; 
GO 
WITH OrderedOrders AS 
(
    SELECT SalesOrderID, OrderDate, 
    ROW_NUMBER() OVER (ORDER BY OrderDate) AS 'RowNumber' 
    FROM Sales.SalesOrderHeader 
) 
SELECT * 
FROM OrderedOrders 
WHERE RowNumber BETWEEN 50 AND 60; 
+0

+1对于AdventureWorks – 2010-06-14 12:29:46

0

什么SQL环境是您使用?答案将取决于环境。

另外,如何订购记录?它们是以某种方式排序的,还是你希望它们按照自然顺序排列?

看你的例子,假设你的ID列是你希望他们排序顺序,您可以使用这样的查询MS SQL Server的

select 
    top (20-12) ids, code 
from 
    [yourtable] 
where 
    ids in (SELECT TOP 20 id from stoplists order by id) 
order by 
    ID desc 

例如抓住你想要的第一个X记录,然后从结果集中抓取你想要的记录。

您可以使用稍微不同的语法在其他SQL语法中实现相同的功能。

0

这取决于你的DBMS。 ROW_NUMBER()是一种非常规的方式。但它不是非常快速和方便。 您可以使用特殊的SQL命令。

对于MSSQL SERVER。 SELECT TOP(5)...

对于MySQL。 SELECT * FROM table LIMIT 0,30(0是开始位置,30是行计数)。

对于火鸟。选择第一个10 ...等。

使用http://en.wikipedia.org/wiki/Select_(SQL)#ROW_NUMBER.28.29_window_function,非标准语法。

+0

并且只获得第50和60行?你需要在SQL Server中嵌套2个'TOP'语句,我可以向你保证'ROW_NUMBER()'比这个更快。它也是**标准的SQL(我不知道哪个版本)。这是非标准的'极限','TOP'等。 – 2010-08-11 09:41:28