我有100条记录,其中我可以在查询中使用“TOP 10”选择前10名。同样有什么可以获得20到30的记录?查询与TOP 10类似以选择中间记录?
2
A
回答
3
由于您使用的是SQL Server 2005,因此您可以使用“新”ROW_NUMBER()函数。这会给你排11〜20:
SELECT Description, Date
FROM (SELECT ROW_NUMBER() OVER (ORDER BY Date DESC)
AS Row, Description, Date FROM LOG)
AS LogWithRowNumbers
WHERE Row >= 11 AND Row <= 20
如果你有很多的记录,内部SELECT子句中使用TOP X,因为没有使用返回1000条记录,如果你只可以加快事情有点经历20抢到记录11:
SELECT Description, Date
FROM (SELECT TOP 20 ROW_NUMBER() OVER (ORDER BY Date DESC)
AS Row, Description, Date FROM LOG)
AS LogWithRowNumbers
WHERE Row >= 11 AND Row <= 20
1
您应该使用ROWNUMBER()用于获取结果集的记录数和过滤它在那里的原因。
SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY name) AS
rownum, name , age FROM Table) AS Table1
WHERE rownum >= 2 AND rownum <= 5
----------------------------
rownum | name | age |
----------------------------
2 |John | 25 |
3 |Adam | 23 |
4 |Tom | 19 |
5 |Jame | 22 |
----------------------------