Waarschijnlijk niet de meest elegante oplossing, en de prestaties van IN
kan lijden op grotere tafels.
De geneste zoekopdracht krijgt het minimum Birthyear
voor elke stad. Alleen records die dit Birthyear
. hebben komen overeen in de buitenste query. Door op leeftijd te bestellen en vervolgens te beperken tot 3 resultaten, krijg je de 3 oudste mensen die ook de oudste in hun stad zijn (Egon Spengler valt af..)
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 |
+-----------------+-------------+------+----+
Bewerken - GROUP BY City
naar buitenste query, omdat mensen met dezelfde geboortejaren meerdere waarden zouden retourneren. Groepering op de buitenste zoekopdracht zorgt ervoor dat er slechts één resultaat per stad wordt geretourneerd, als meer dan één persoon dat minimum Birthyear
heeft. . De ct
kolom laat zien of er meer dan één persoon bestaat in de stad met dat Birthyear