MySQL: выберите N строк, но только с уникальными значениями в одном столбце

Учитывая этот набор данных:

ID  Name            City            Birthyear
1   Egon Spengler   New York        1957
2   Mac Taylor      New York        1955
3   Sarah Connor    Los Angeles     1959
4   Jean-Luc Picard La Barre        2305
5   Ellen Ripley    Nostromo        2092
6   James T. Kirk   Riverside       2233
7   Henry Jones     Chicago         1899

Мне нужно найти 3 самых старых людей, но только по одному в каждом городе.

Если бы это были только три самых старых, это было бы ...

Генри Джонс / ЧикагоМак Тейлор / Нью-ЙоркЭгон Шпенглер / Нью-Йорк

Однако, поскольку Egon Spengler и Mac Taylor находятся в Нью-Йорке, Egon Spengler выбывает, а вместо этого приходит следующий (Сара Коннор / Лос-Анджелес).

Какие-нибудь элегантные решения?

Обновить:

В настоящее время вариант PConroy является лучшим / самым быстрым решением:

SELECT P.*, COUNT(*) AS ct
   FROM people P
   JOIN (SELECT MIN(Birthyear) AS Birthyear
              FROM people 
              GROUP by City) P2 ON P2.Birthyear = P.Birthyear
   GROUP BY P.City
   ORDER BY P.Birthyear ASC 
   LIMIT 10;

Его оригинальный запрос с «IN» очень медленный с большими наборами данных (прерванный через 5 минут), но перемещение подзапроса в JOIN значительно ускорит его. Это заняло около 0,15 секунд в течение ок. 1 млн строк в моей тестовой среде. У меня есть индекс "Город, Год рождения", а второй только "Год рождения".

Примечание: это связано с ...

Выбор уникальных строк в наборе из двух возможностейSQL-запрос, чтобы получить последнюю цену

Ответы на вопрос(5)

Ваш ответ на вопрос