Prawdopodobnie nie najbardziej eleganckie rozwiązanie, a wydajność IN
może ucierpieć na większych stołach.
Zapytanie zagnieżdżone otrzymuje minimalny Birthyear
dla każdego miasta. Tylko rekordy, które mają ten Birthyear
są dopasowane w zewnętrznym zapytaniu. Porządkowanie według wieku, a następnie ograniczenie do 3 wyników daje 3 najstarsze osoby, które są również najstarsze w swoim mieście (Egon Spengler odpada..)
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 |
+-----------------+-------------+------+----+
Edytuj - dodano GROUP BY City
na zapytanie zewnętrzne, ponieważ ludzie z tymi samymi latami urodzenia zwracaliby wiele wartości. Grupowanie według zapytania zewnętrznego zapewnia, że tylko jeden wynik zostanie zwrócony na miasto, jeśli więcej niż jedna osoba ma ten minimalny Birthyear
. ct
kolumna pokaże, czy w mieście istnieje więcej niż jedna osoba o tym Birthyear