Выберите последнюю строку в MySQL

Как я могу SELECT использовать последнюю строку в таблице MySQL?

Я INSERT данные, и мне нужно получить значение столбца из предыдущей строки.

В таблице есть auto_increment.

Ответ 1

Да, там есть auto_increment

Если вы хотите получить последнюю из всех строк в таблице, то это, наконец, время, когда MAX(id) - правильный ответ! Вид:

SELECT fields FROM table ORDER BY id DESC LIMIT 1;

Ответ 2

Имейте в виду, что таблицы в реляционных базах данных - это всего лишь множество строк. И в математике - неупорядоченные коллекции. Нет ни первой, ни последней строки; нет предыдущей строки или следующей строки.

Сначала вам нужно отсортировать свой набор неупорядоченных строк с помощью некоторого поля, а затем вы освободите итерацию по набору результатов в указанном вами порядке.

Поскольку у вас есть поле с добавлением auto, я предполагаю, что вы хотите, чтобы это поле сортировки. В этом случае вы можете сделать следующее:

SELECT    *
FROM      your_table
ORDER BY  your_auto_increment_field DESC
LIMIT     1;

Посмотрите, как мы сначала сортируем набор неупорядоченных строк с помощью your_auto_increment_field (или того, что вы назвали) в порядке убывания. Затем мы ограничиваем набор результатов только первой строкой с помощью LIMIT 1.

Ответ 3

на таблицах со многими строками есть два запроса, вероятно, быстрее...

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

SELECT * FROM table WHERE id = @last_id;

Ответ 4

Вы можете комбинировать два запроса, предлагаемые @spacepille, в один запрос, который выглядит так:

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

Он должен работать быстро, но на INNODB-таблицах это доля милисекунды медленнее, чем ORDER + LIMIT.

Ответ 6

Если вы хотите добавить последнее, добавьте отметку времени и выберите упорядоченное в обратном порядке наивысшую отметку времени, лимит 1. Если вы хотите пойти по ID, сортируйте по ID. Если вы хотите использовать ту, которую вы просто добавили, используйте mysql_insert_id.

Ответ 7

SELECT * FROM adds where id=(select max(id) from adds);

Этот запрос использовался для извлечения последней записи в вашей таблице.

Ответ 8

Вы можете использовать OFFSET в команде LIMIT:

SELECT * FROM aTable LIMIT 1 OFFSET 99

если в вашей таблице 100 строк, это возвращает последнюю строку, не полагаясь на primary_key

Ответ 9

Многие ответы здесь говорят то же самое (порядок по вашему автоинкременту), что нормально, если у вас есть автоинкрементный столбец, который проиндексирован.

Напомним, что если у вас есть такое поле, и оно является первичным ключом, то нет снижения производительности за использование order by сравнению с select max(id). Первичный ключ - это порядок упорядочения данных в файлах базы данных (по крайней мере, для InnoDB), и СУБД знает, где заканчиваются эти данные, и может оптимизировать order by id + limit 1 чтобы он соответствовал достижению max(id)

Теперь дорога проходит меньше, когда у вас нет автоинкрементного первичного ключа. Может быть, первичный ключ - это естественный ключ, который состоит из 3 полей... Однако не все потеряно. Из языка программирования вы можете сначала получить количество строк с

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

а затем использовать полученный номер в предложении LIMIT

SELECT * FROM orderbook2
LIMIT <number_from_rowcount>, 1

К сожалению, MySQL не допускает подзапрос или пользовательскую переменную в предложении LIMIT

Ответ 10

Почти в каждой таблице базы данных есть столбец auto_increment (обычно id)

Если вы хотите, чтобы последняя из всех строк в таблице,

SELECT columns FROM table ORDER BY id DESC LIMIT 1;

ИЛИ ЖЕ

Вы можете объединить два запроса в один запрос, который выглядит следующим образом:

SELECT columns FROM table WHERE id=(SELECT MAX(id) FROM table);