Probablemente no sea la solución más elegante, y el rendimiento de IN
puede sufrir en mesas más grandes.
La consulta anidada obtiene el mínimo Birthyear
para cada ciudad. Solo registros que tengan este Birthyear
coinciden en la consulta externa. Ordenar por edad y luego limitar a 3 resultados le da a las 3 personas más viejas que también son las más viejas de su ciudad (Egon Spengler se retira...)
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 - añadido GROUP BY City
a la consulta externa, ya que las personas con el mismo año de nacimiento devolverían múltiples valores. La agrupación en la consulta externa garantiza que solo se devolverá un resultado por ciudad, si más de una persona tiene ese mínimo Birthyear
. El ct
La columna mostrará si existe más de una persona en la ciudad con ese Birthyear