当需要获取有序集合的最后几行时,通常会创建一个派生表并重新排序。例如,要返回带有自增id
的表的最后3个元素:
SELECT * FROM (
SELECT * FROM table ORDER BY id DESC LIMIT 3
) t ORDER BY t.id
因为LIMIT
也可以有偏移量,如果我们事先知道了行数(比如10),就可以使用以下查询来达到相同的结果:
SELECT * FROM table ORDER BY id LIMIT 3 OFFSET 7
是否可以运行子查询来计数(*)
一个表并动态构建一个使用该数字的LIMIT
?
SELECT * FROM table ORDER BY id LIMIT 3 OFFSET [ select count() -3 ]
LIMIT
参数必须是字面量,不能是表达式。如果您需要动态计算限制,则必须在存储过程的准备查询中执行,或在客户端语言中执行。 - BarmarHAVING
和COUNT()
。不过我得测试一下这个理论。 - Funk Forty NinerSELECT * FROM table WHERE id > (SELECT count(id) FROM table)-3
的东西,虽然它非常特定于所有id
都存在且连续自增的情况。对于原始方法适用的其他文本可能性并不太灵活。 - sidyll