我有興趣學習一些(理想狀況下)從數據庫表中選擇第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,我一直找不到理想的解決方案。