在不改变表结构的情况下,选择表中最后n行的最有效方法是什么?

the*_*gad 18 mysql sql

使用mySQL选择表中最后n行的最有效方法是什么?该表包含数百万行,并且在任何给定时间我都不知道该表有多大(它在不断增长).该表有一个自动递增的列,并用作每行的唯一标识符.

Era*_*rin 46

SELECT * FROM table_name ORDER BY auto_incremented_id DESC LIMIT n
Run Code Online (Sandbox Code Playgroud)


Ser*_*sky 16

实际上,按顺序获取最后n行的正确方法是使用子查询:

(SELECT id, title, description FROM my_table ORDER BY id DESC LIMIT 5) 
ORDER BY tbl.id ASC
Run Code Online (Sandbox Code Playgroud)

因为这种方式是我所知道的,它将以正确的顺序返回它们.接受的答案实际上是" 从按降序ID排序的集合中选择前5行 "的解决方案,但这很可能是您需要的.

  • 也许迟到了,但我刚从[这里]找到了(http://www.mysqlfaqs.net/mysql-faqs/Tricky-Select-Queries/How-to-get-last-top-records-in-asceding-你可以简单地省略外部select和别名,只需要:`(SELECT*FROM table ORDER BY id DESC LIMIT 50)ORDER BY id ASC;`虽然读起来可能有点混乱. (3认同)

tro*_*on5 5

(类似于“marco”的答案,)
我最喜欢的也是 MySQL 的 max() 函数,在一个简单的单行中,但还有其他肯定的方法:

SELECT whatever FROM mytable WHERE id > (SELECT max(id)-10 FROM mytable);
Run Code Online (Sandbox Code Playgroud)

...你会得到“last id minus 10”,通常是该表的最后 10 个条目。

这是一种简短的方法,不仅可以在存在 auto_increment-row(此处为 id)的情况下避免错误 1111(“无效使用组函数”)。
max() 函数有多种使用方式。