我有兴趣学习一些(理想状况下)从数据库表中选择第n行的数据库不可知方法。 看看如何使用如下数据库的本机功能实现此目标也将颇有趣: 面试
我目前在SQL Server 2005中执行相似如下的操做,可是我但愿看到其余人的不可知论方法: 数据库
WITH Ordered AS ( SELECT ROW_NUMBER() OVER (ORDER BY OrderID) AS RowNumber, OrderID, OrderDate FROM Orders) SELECT * FROM Ordered WHERE RowNumber = 1000000
感谢上述SQL: Firoz Ansari的Weblog 服务器
更新:有关SQL标准,请参见Troels Arvin的答案 。 Troels,您有咱们能够引用的任何连接吗? 函数
对于SQL Server,按行号排序的通用方法以下: 学习
SET ROWCOUNT @row --@row = the row number you wish to work on.
例如: spa
set rowcount 20 --sets row to 20th row select meat, cheese from dbo.sandwich --select columns from table at 20th row set rowcount 0 --sets rowcount back to all rows
这将返回第20行的信息。 请确保以后再放入行计数0。 code
这是您的困惑的快速解决方案。 blog
SELECT * FROM table ORDER BY `id` DESC LIMIT N, 1
在这里,您能够经过填充N = 0来得到最后一行,经过N = 1来得到倒数第二行,经过填充N = 3来得到倒数第四行,依此类推。 排序
这是面试中很是广泛的问题,这是很是简单的答案。 get
更进一步,若是您想要金额,ID或某些数字排序顺序,那么您可能不但愿在MySQL中使用CAST函数。
SELECT DISTINCT (`amount`) FROM cart ORDER BY CAST( `amount` AS SIGNED ) DESC LIMIT 4 , 1
在这里,经过填充N = 4,您将可以从CART表中得到最高金额的第五个最后记录。 您能够适合您的字段和表名称并提出解决方案。
SQL 2005及更高版本具备此内置功能。 使用ROW_NUMBER()函数。 对于具备<<上一页和下一页>>样式浏览的网页而言,它很是有用:
句法:
SELECT * FROM ( SELECT ROW_NUMBER () OVER (ORDER BY MyColumnToOrderBy) AS RowNum, * FROM Table_1 ) sub WHERE RowNum = 23
加:
LIMIT n,1
这会将结果限制为从结果n开始的一个结果。
LIMIT n,1在MS SQL Server中不起做用。 我认为这只是惟一不支持该语法的主要数据库。 公平地说,它不是SQL标准的一部分,尽管它获得了应有的普遍支持。 除了SQL Server以外,LIMIT在全部状况下都很是有效。 对于SQL Server,我一直找不到理想的解决方案。