4

我知道那里已经有一些帖子,但有些帖子相互矛盾。

我承担了一个项目,在该项目中我继承了一个包含 1000 个条目的表。

问题是,表上没有自动增量 ID 字段,我被要求提取最后输入的 300 行。

是否可以从表中提取最后 300 个条目?是否有“系统行 ID”?

4

3 回答 3

3

严格的答案是“否”,除非您有日期或其他指示顺序的东西。表本质上是无序的。

在实践中,您通常按照放入的顺序取回数据。“我将数据加载一次,没有后续插入,到只有一个处理器和一个磁盘的系统中”这句话越真实,就越有可能数据实际上是有序的。

拥有系统行 ID 对您没有帮助,因为您可能有删除和后续插入。在这种情况下,后面的记录将放在前面的页面中。

你有一张小桌子。做 a select *,将数据复制到电子表格中,然后从那里开始工作。

或者,您可以选择行号增加的表,插入另一个表,然后从那里进行选择。像这样的伪代码:

insert into NewTable (seqnum, cols)
    select :rownum=:rownum+1, cols
    from YourTable

你有机会得到你想要的。

最后一点。 如果您进行了插入并拥有自插入以来的日志文件,您可能能够从那里获取信息。有一点工作。

于 2013-01-17T19:54:34.227 回答
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
于 2013-01-17T20:01:00.110 回答
0

如果你在表中至少有一个记录插入时间,那么你可以使用这个..否则没有。

SELECT * FROM 
yourtable 
ORDER BY inserted_time desc limit 300;
于 2013-01-17T19:54:53.303 回答