如何在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,我一直找不到理想的解决方案。

相关文章
相关标签/搜索