Seleccionar la última fila en MySQL


¿Cómo puedo SELECT la última fila en una tabla MySQL?

Estoy INSERT ing datos y necesito recuperar un valor de columna de la fila anterior.

Hay un auto_increment en la tabla.

 136
Author: esqew, 2010-11-02

8 answers

Sí, hay un auto_increment allí

Si desea la última de todas las filas en la tabla, entonces este es finalmente el momento en que MAX(id) es la respuesta correcta! Tipo de:

SELECT fields FROM table ORDER BY id DESC LIMIT 1;
 302
Author: Pekka 웃,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-07 10:13:15

Tenga en cuenta que las tablas en las bases de datos relacionales son solo conjuntos de filas. Y los conjuntos en matemáticas son colecciones desordenadas. No hay primera ni última fila; no hay fila anterior ni fila siguiente.

Primero tendrá que ordenar su conjunto de filas desordenadas por algún campo, y luego quedará libre la iteración a través del conjunto de resultados en el orden que definió.

Dado que tiene un campo de incremento automático, asumo que desea que sea el campo de ordenación. En ese caso, es posible que desee hacer el siguiente:

SELECT    *
FROM      your_table
ORDER BY  your_auto_increment_field DESC
LIMIT     1;

Vea cómo primero estamos ordenando el conjunto de filas desordenadas por el your_auto_increment_field (o como se le llame) en orden descendente. Luego limitamos el conjunto de resultados a solo la primera fila con LIMIT 1.

 23
Author: Daniel Vassallo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-01 23:23:13

En tablas con muchas filas hay dos consultas probablemente más rápidas...

SELECT @last_id := MAX(id) FROM table;

SELECT * FROM table WHERE id = @last_id;
 19
Author: spacepille,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-08 18:50:01

Puede combinar dos consultas sugeridas por @spacepille en una única consulta que se vea así:

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

Debería funcionar muy rápido, pero en las tablas INNODB es fracción de milisegundo más lento que ORDER+LIMIT.

 11
Author: vzr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-23 14:04:47

Simplemente use: PDO::lastInsertId

Http://php.net/manual/en/pdo.lastinsertid.php

 7
Author: macio.Jun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-17 16:04:35

Si desea la más reciente, agregue una marca de tiempo y seleccione ordenado en orden inverso por la marca de tiempo más alta, límite 1. Si quieres ir por ID, ordena por ID. Si desea usar el que acaba de agregar, use mysql_insert_id.

 4
Author: EboMike,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-01 23:23:37
SELECT * FROM adds where id=(select max(id) from adds);

Esta consulta se utiliza para obtener el último registro de la tabla.

 3
Author: karthikeyan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-17 11:51:21

Puedes usar un OFFSET en un comando LIMIT:

SELECT * FROM aTable LIMIT 1 OFFSET 99

En caso de que su tabla tenga 100 filas, devolverá la última fila sin depender de una primary_key

 0
Author: Benvorth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-30 10:24:37