Provavelmente não é a solução mais elegante, e o desempenho de
IN
pode sofrer em mesas maiores. A consulta aninhada obtém o mínimo
Birthyear
para cada cidade. Somente registros que tenham este Birthyear
são correspondidos na consulta externa. Ordenando por idade e limitando a 3 resultados, você obtém as 3 pessoas mais velhas que também são as mais velhas em sua cidade (Egon Spengler desiste ..) 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 |
+-----------------+-------------+------+----+
Editar - adicionado
GROUP BY City
à consulta externa, pois pessoas com os mesmos anos de nascimento retornariam vários valores. O agrupamento na consulta externa garante que apenas um resultado seja retornado por cidade, se mais de uma pessoa tiver esse mínimo de Birthyear
. O ct
a coluna mostrará se existir mais de uma pessoa na cidade com esse Birthyear