从具有值 id 的测试表中,1 to 50
如何从给定的数字中向后选择 3 行?
例如:给定数字 = 20。3 id 的后面 = 17。
我实际上是在尝试向后偏移。如何做到这一点?
以降序排列项目,然后使用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
把事情简单化?像下面的查询。
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;