java表格选择的行_如何在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标准,请参见Troels Arvin的答案 。 Troels,您有我们可以引用的任何链接吗?

#1楼

对于SQL Server,按行号排序的通用方法如下:

SET ROWCOUNT @row --@row = the row number you wish to work on.

例如:

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。

#2楼

这是您的困惑的快速解决方案。

SELECT * FROM table ORDER BY `id` DESC LIMIT N, 1

在这里,您可以通过填充N = 0来获得最后一行,通过N = 1来获得倒数第二行,通过填充N = 3来获得倒数第四行,依此类推。

这是面试中非常普遍的问题,这是非常简单的答案。

更进一步,如果您想要金额,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,我一直找不到理想的解决方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值