我知道那里已经有一些帖子,但有些帖子相互矛盾。
我承担了一个项目,在该项目中我继承了一个包含 1000 个条目的表。
问题是,表上没有自动增量 ID 字段,我被要求提取最后输入的 300 行。
是否可以从表中提取最后 300 个条目?是否有“系统行 ID”?
我知道那里已经有一些帖子,但有些帖子相互矛盾。
我承担了一个项目,在该项目中我继承了一个包含 1000 个条目的表。
问题是,表上没有自动增量 ID 字段,我被要求提取最后输入的 300 行。
是否可以从表中提取最后 300 个条目?是否有“系统行 ID”?
严格的答案是“否”,除非您有日期或其他指示顺序的东西。表本质上是无序的。
在实践中,您通常按照放入的顺序取回数据。“我将数据加载一次,没有后续插入,到只有一个处理器和一个磁盘的系统中”这句话越真实,就越有可能数据实际上是有序的。
拥有系统行 ID 对您没有帮助,因为您可能有删除和后续插入。在这种情况下,后面的记录将放在前面的页面中。
你有一张小桌子。做 a select *
,将数据复制到电子表格中,然后从那里开始工作。
或者,您可以选择行号增加的表,插入另一个表,然后从那里进行选择。像这样的伪代码:
insert into NewTable (seqnum, cols)
select :rownum=:rownum+1, cols
from YourTable
你有机会得到你想要的。
最后一点。 如果您进行了插入并拥有自插入以来的日志文件,您可能能够从那里获取信息。有一点工作。
试试这个:
SELECT col1, col2, ...
FROM (SELECT col1,col2, ..., (@auto:=@auto+1) indx
FROM tablename, (SELECT @auto:=1) AS a
) AS b
ORDER BY indx DESC
LIMIT 30
如果你在表中至少有一个记录插入时间,那么你可以使用这个..否则没有。
SELECT * FROM
yourtable
ORDER BY inserted_time desc limit 300;