Вероятно не е най-елегантното решение и производителността на IN
може да страда на по-големи маси.
Вложената заявка получава минималната Birthyear
за всеки град. Записва само тези, които имат тази Birthyear
се съпоставят във външната заявка. Подреждането по възраст и след това ограничаването до 3 резултата ви дава 3-ма най-възрастни хора, които са и най-възрастните в своя град (Егон Шпенглер отпада..)
SELECT Name, City, Birthyear, COUNT(*) AS ct
FROM table
WHERE Birthyear IN (SELECT MIN(Birthyear)
FROM table
GROUP by City)
GROUP BY City
ORDER BY Birthyear DESC LIMIT 3;
+-----------------+-------------+------+----+
| name | city | year | ct |
+-----------------+-------------+------+----+
| Henry Jones | Chicago | 1899 | 1 |
| Mac Taylor | New York | 1955 | 1 |
| Sarah Connor | Los Angeles | 1959 | 1 |
+-----------------+-------------+------+----+
Редактиране - добавен GROUP BY City
към външна заявка, тъй като хората с еднакви години на раждане биха върнали множество стойности. Групирането във външната заявка гарантира, че само един резултат ще бъде върнат на град, ако повече от един човек има този минимален Birthyear
. ct
колоната ще покаже дали в града има повече от един човек с тази Birthyear