Probabilmente non la più elegante delle soluzioni e le prestazioni di IN
potrebbe soffrire su tavoli più grandi.
La query nidificata ottiene il Birthyear
minimo per ogni città. Solo i record che hanno questo Birthyear
sono abbinati nella query esterna. Ordinando per età e poi limitandosi a 3 risultati ottieni le 3 persone più anziane che sono anche le più anziane della loro città (Egon Spengler abbandona..)
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 |
+-----------------+-------------+------+----+
Modifica - aggiunto GROUP BY City
alla query esterna, poiché le persone con gli stessi anni di nascita restituirebbero più valori. Il raggruppamento sulla query esterna garantisce che venga restituito un solo risultato per città, se più di una persona ha quel Birthyear
minimo . Il ct
la colonna mostrerà se esiste più di una persona nella città con quel Birthyear