Ответ 1
Вы не можете ссылаться на результат агрегатной функции (например, MAX()) в предложении WHERE того же запроса.
Нормативным шаблоном для решения этого типа проблемы является использование встроенного представления, что-то вроде этого:
SELECT t.firstName
, t.Lastname
, t.id
FROM mytable t
JOIN ( SELECT MAX(mx.id) AS max_id
FROM mytable mx
) m
ON m.max_id = t.id
Это всего лишь один способ получить заданный результат. Существует несколько других подходов к получению одного и того же результата, и некоторые из них могут быть гораздо менее эффективными, чем другие. Другие ответы демонстрируют такой подход:
WHERE t.id = (SELECT MAX(id) FROM ... )
Иногда самый простой подход - использовать ORDER BY с LIMIT. (Обратите внимание, что этот синтаксис специфичен для MySQL)
SELECT t.firstName
, t.Lastname
, t.id
FROM mytable t
ORDER BY t.id DESC
LIMIT 1
Обратите внимание, что это вернет только одну строку; поэтому, если имеется более одной строки с одинаковым значением id, то это не будет возвращать все из них. (Первый запрос вернет ВСЕ строки, которые имеют одинаковое значение id.)
Этот подход может быть расширен, чтобы получить более одной строки, вы можете получить пять строк с наивысшими значениями id, изменив их на LIMIT 5
.
Обратите внимание, что производительность этого подхода особенно зависит от доступного подходящего индекса (т.е. с id
как PRIMARY KEY или в качестве ведущего столбца в другом индексе.) Подходящий индекс улучшит производительность запросов, используя все эти подходы.