Förmodligen inte den mest eleganta av lösningarna, och prestandan för IN
kan drabbas av större bord.
Den kapslade frågan får minsta Birthyear
för varje stad. Endast poster som har detta Birthyear
matchas i den yttre frågan. Om du beställer efter ålder och sedan begränsar till 3 resultat får du de 3 äldsta personerna som också är de äldsta i sin stad (Egon Spengler hoppar av..)
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 |
+-----------------+-------------+------+----+
Redigera - lade till GROUP BY City
till yttre fråga, eftersom personer med samma födelseår skulle returnera flera värden. Gruppering på den yttre frågan säkerställer att endast ett resultat returneras per stad, om mer än en person har det minsta Birthyear
. ct
kolumnen visar om det finns mer än en person i staden med det Birthyear