Pravděpodobně to není nejelegantnější řešení a výkon IN
může trpět na větších stolech.
Vnořený dotaz získá minimální Birthyear
pro každé město. Pouze záznamy, které mají tento Birthyear
se shodují ve vnějším dotazu. Seřazením podle věku a omezením na 3 výsledky získáte 3 nejstarší lidi, kteří jsou zároveň nejstaršími ve svém městě (Egon Spengler odpadá..)
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 |
+-----------------+-------------+------+----+
Upravit - přidáno GROUP BY City
na vnější dotaz, protože lidé se stejným rokem narození by vrátili více hodnot. Seskupení na vnějším dotazu zajišťuje, že bude vrácen pouze jeden výsledek na město, pokud má více než jedna osoba minimální Birthyear
. ct
se zobrazí, zda ve městě existuje více než jedna osoba s daným Birthyear