代码之家  ›  专栏  ›  技术社区  ›  esqew

选择MySQL中的最后一行

  •  150
  • esqew  · 技术社区  · 14 年前

    我怎么能 SELECT MySQL表中的最后一行?

    我是 INSERT 我需要从前一行检索一个列值。

    有一个 auto_increment

    10 回复  |  直到 9 年前
        1
  •  367
  •   stefan    7 年前

    是的,里面有一个自动增量

    如果你想要最后一个 在桌子上,这是最后一次 MAX(id) 是正确的答案!有点:

    SELECT fields FROM table ORDER BY id DESC LIMIT 1;
    
        2
  •  31
  •   Daniel Vassallo    14 年前

    请记住,关系数据库中的表只是一组行。数学中的集合是无序的集合。没有第一行或最后一行;没有前一行或下一行。

    您必须先按某个字段对无序行集进行排序,然后才能按定义的顺序对结果集进行自由迭代。

    SELECT    *
    FROM      your_table
    ORDER BY  your_auto_increment_field DESC
    LIMIT     1;
    

    看看我们是如何按照 your_auto_increment_field (或者你叫它什么名字)按降序排列。然后我们将结果集限制为 LIMIT 1 .

        3
  •  24
  •   spacepille    12 年前

    在有很多行的表上有两个查询可能更快。。。

    SELECT @last_id := MAX(id) FROM table;
    
    SELECT * FROM table WHERE id = @last_id;
    
        4
  •  17
  •   vzr    9 年前

    SELECT * FROM `table_name` WHERE id=(SELECT MAX(id) FROM `table_name`);
    

    它应该工作得很快,但在INNODB表上,它比ORDER+LIMIT慢了几分之一毫秒。

        5
  •  7
  •   macio.Jun    12 年前
        6
  •  4
  •   EboMike    14 年前

    如果需要最近添加的时间戳,请添加一个时间戳,然后选择“按最高时间戳倒序排序”,限制为1。如果要按ID排序,请按ID排序。如果要使用刚添加的ID,请使用 mysql_insert_id .

        7
  •  2
  •   Dwza    8 年前
    SELECT * FROM adds where id=(select max(id) from adds);
    

        8
  •  2
  •   Sani Kamal    6 年前

    几乎每个数据库表都有一个自动递增列(通常是id)

    如果你想要表格中最后一行,

    SELECT columns FROM table ORDER BY id DESC LIMIT 1;
    

    或者

    您可以将两个查询组合成如下所示的单个查询:

    SELECT columns FROM table WHERE id=(SELECT MAX(id) FROM table);
    
        9
  •  2
  •   Ilia Gilmijarow    5 年前

    这里的许多答案都是相同的(按自动递增的顺序排列),这是可以的,前提是有一个自动递增的列被索引。

    另一方面,如果你有这样的领域 主键,使用时没有性能损失 order by select max(id) . 主要的关键是如何在数据库文件中对数据进行排序(至少对于InnoDB),RDBMS知道数据的结束位置,并且它可以优化 order by id + limit 1 max(id)

    现在少走的路是当你没有自动递增的主键。可能主键是一个自然键,由三个字段组成。。。

    SELECT Count(*) - 1 AS rowcount FROM <yourTable>;
    

    然后使用 LIMIT

    SELECT * FROM orderbook2
    LIMIT <number_from_rowcount>, 1
    

    不幸的是,MySQL不允许在 限制 条款

        10
  •  1
  •   Benvorth    6 年前

    你可以用 OFFSET LIMIT 命令:

    SELECT * FROM aTable LIMIT 1 OFFSET 99
    

    如果表有100行,则返回最后一行,而不依赖主键