おそらく最も洗練されたソリューションではなく、INのパフォーマンス 大きなテーブルでは苦しむかもしれません。
ネストされたクエリは、最小のBirthyearを取得します 各都市について。このBirthyearを持つレコードのみ 外部クエリで一致します。年齢順に並べて、結果を3つに制限すると、自分の街で最も古い3人の最年長者になります(Egon Spenglerは脱落します)。
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 |
+-----------------+-------------+------+----+
編集 -GROUP BY Cityを追加しました 同じ出生年の人は複数の値を返すため、外部クエリに。外側のクエリでグループ化すると、複数の人がその最小のBirthyearを持っている場合、都市ごとに1つの結果のみが返されるようになります。 。 ct 列には、そのBirthyearを持つ都市に複数の人が存在するかどうかが表示されます