-1

从具有值 id 的测试表中,1 to 50如何从给定的数字中向后选择 3 行?

例如:给定数字 = 20。3 id 的后面 = 17。

我实际上是在尝试向后偏移。如何做到这一点?

4

2 回答 2

3

以降序排列项目,然后使用LIMIT带偏移量的标准:

SELECT * FROM table ORDER BY id DESC LIMIT 20, 3

您可以在子查询中使用它以升序重新排序项目:

select * from (select * from TEST order by id desc LIMIT 5, 3) p order by id asc

工作演示

更新

只取一行(在您的示例中为第 17 行,在我的演示中为第 2 行):

select *
from (select * from TEST order by id desc LIMIT 5, 3) p
order by id asc
limit 1

更新2

查询无论表中有多少行都返回同一行:

select * from
(select * from
 (select * from TEST order by id asc LIMIT 5) p2
 order by id desc LIMIT 4) p
order by id asc
limit 1
于 2013-09-22T19:31:19.890 回答
0

把事情简单化?像下面的查询。

select 
 *
from 
 test
where 
 id = 5 - 3

http://sqlfiddle.com/#!2/74afb/3 这种方式没有文件排序,如果你做了一个索引就可以使用。

加上查询优化器将此查询重写为如下所示

select 
 test.id as 'id'
from 
 test
where 
 test.id = 2

因为在运行查询之前计算了减法 (5 - 3) = 2。

您可以通过运行这些查询来看到这一点

explain extended select * from test where id = 5 - 3;
show warnings;
于 2013-09-22T19:56:06.297 回答