从没有自动ID的表中选择最后250行

时间:2013-01-17 19:46:35

标签: mysql select sql-order-by limit

我知道已经发布了一些帖子,但有些帖子存在冲突。

我接手了一个项目,我继承了一个包含1000个条目的表。

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

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

3 个答案:

答案 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;