Не можем да препращаме към резултата от агрегатна функция (например MAX()
) в WHERE
клауза на същия SELECT
.
Нормативният модел за решаване на този тип проблеми е да се използва вграден изглед, нещо като това:
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
Имайте предвид, че това ще върне само един ред; така че ако има повече от един ред с една и съща стойност на идентификатора, тогава това няма да върне всички. (Първата заявка ще върне ВСИЧКИ редове, които имат една и съща стойност на идентификатора.)
Този подход може да бъде разширен, за да получите повече от един ред, можете да получите петте реда, които имат най-високите стойности на идентификатор, като го промените на LIMIT 5
.
Имайте предвид, че ефективността на този подход зависи особено от наличието на подходящ индекс (т.е. с id
като ПЪРВИЧЕН КЛЮЧ или като водеща колона в друг индекс.) Подходящ индекс ще подобри производителността на заявките, използващи всички тези подходи.