おそらく最も洗練されたソリューションではなく、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
を持つ都市に複数の人が存在するかどうかが表示されます