Wahrscheinlich nicht die eleganteste Lösung und die Leistung von IN
kann bei größeren Tabellen leiden.
Die verschachtelte Abfrage ruft das minimale Birthyear
ab für jede Stadt. Nur Datensätze, die dieses Birthyear
haben werden in der äußeren Abfrage abgeglichen. Wenn Sie nach Alter ordnen und dann auf 3 Ergebnisse beschränken, erhalten Sie die 3 ältesten Personen, die auch die ältesten in ihrer Stadt sind (Egon Spengler fällt aus..)
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 |
+-----------------+-------------+------+----+
Bearbeiten - GROUP BY City
hinzugefügt zur äußeren Abfrage, da Personen mit gleichen Geburtsjahren mehrere Werte zurückgeben würden. Die Gruppierung nach der äußeren Abfrage stellt sicher, dass nur ein Ergebnis pro Stadt zurückgegeben wird, wenn mehr als eine Person dieses Mindest-Birthyear
hat . Der ct
Spalte zeigt an, ob es in der Stadt mehr als eine Person mit diesem Birthyear
gibt