我知道已经发布了一些帖子,但有些帖子存在冲突。
我接手了一个项目,我继承了一个包含1000个条目的表。
问题是,表上没有自动增量ID字段,并且我被要求提取输入的最后300行。
可以从表中提取最后300个条目吗?是否有"系统行ID"?
答案 0 :(得分:3)
严格的答案是“不”,除非你有一个日期或其他表明顺序的东西。表本质上是无序的。
实际上,你通常按照你输入的顺序取回数据。声明越多,“我将数据加载一次,没有后续插入,进入只有一个处理器和一个磁盘的系统”,数据实际上更有可能是有序的。
拥有系统行ID对您没有帮助,因为您可能有删除和后续插入。在这种情况下,稍后的记录将放在较早的页面中。
你有一张小桌子。执行select *
,将数据复制到电子表格中并从那里开始工作。
或者,您可以选择具有递增行号的表,插入另一个表,然后从那里执行选择。像这样的伪代码:
insert into NewTable (seqnum, cols)
select :rownum=:rownum+1, cols
from YourTable
你有可能得到你想要的东西。
最后一点。 如果您插入并插入了自插入以来的日志文件,您可以从那里获取信息。做了一点工作。
答案 1 :(得分:2)
试试这个:
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
答案 2 :(得分:0)
如果你在表格中至少有一个记录插入时间,那么你可以使用它..否则没有。
SELECT * FROM
yourtable
ORDER BY inserted_time desc limit 300;