Probablement pas la plus élégante des solutions, et les performances de IN
peut souffrir sur des tables plus grandes.
La requête imbriquée obtient le minimum Birthyear
pour chaque ville. Seuls les enregistrements qui ont cette Birthyear
sont mis en correspondance dans la requête externe. Trier par âge puis limiter à 3 résultats vous donne les 3 personnes les plus âgées qui sont aussi les plus âgées de leur ville (Egon Spengler abandonne..)
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 |
+-----------------+-------------+------+----+
Modifier - ajout de GROUP BY City
à la requête externe, car les personnes ayant les mêmes années de naissance renverraient plusieurs valeurs. Le regroupement sur la requête externe garantit qu'un seul résultat sera renvoyé par ville, si plus d'une personne a ce minimum Birthyear
. Le ct
la colonne montrera s'il existe plus d'une personne dans la ville avec cette Birthyear