如何在SQL數據庫表中選擇第n行?

我有興趣學習一些(理想狀況下)從數據庫表中選擇第n行的數據庫不可知方法。 看看如何使用如下數據庫的本機功能實現此目標也將頗有趣: 面試

  • SQL服務器
  • 的MySQL
  • PostgreSQL的
  • SQLite的
  • 甲骨文

我目前在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,您有咱們能夠引用的任何連接嗎? 函數


#1樓

對於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


#2樓

這是您的困惑的快速解決方案。 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表中得到最高金額的第五個最後記錄。 您能夠適合您的字段和表名稱並提出解決方案。


#3樓

SQL 2005及更高版本具備此內置功能。 使用ROW_NUMBER()函數。 對於具備<<上一頁和下一頁>>樣式瀏覽的網頁而言,它很是有用:

句法:

SELECT
    *
FROM
    (
        SELECT
            ROW_NUMBER () OVER (ORDER BY MyColumnToOrderBy) AS RowNum,
            *
        FROM
            Table_1
    ) sub
WHERE
    RowNum = 23

#4樓

加:

LIMIT n,1

這會將結果限制爲從結果n開始的一個結果。


#5樓

LIMIT n,1在MS SQL Server中不起做用。 我認爲這只是惟一不支持該語法的主要數據庫。 公平地說,它不是SQL標準的一部分,儘管它獲得了應有的普遍支持。 除了SQL Server以外,LIMIT在全部狀況下都很是有效。 對於SQL Server,我一直找不到理想的解決方案。

相關文章
相關標籤/搜索