Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL:seleziona N righe, ma con solo valori univoci in una colonna

Probabilmente non la più elegante delle soluzioni e le prestazioni di IN potrebbe soffrire su tavoli più grandi.

La query nidificata ottiene il Birthyear minimo per ogni città. Solo i record che hanno questo Birthyear sono abbinati nella query esterna. Ordinando per età e poi limitandosi a 3 risultati ottieni le 3 persone più anziane che sono anche le più anziane della loro città (Egon Spengler abbandona..)

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  |
+-----------------+-------------+------+----+

Modifica - aggiunto GROUP BY City alla query esterna, poiché le persone con gli stessi anni di nascita restituirebbero più valori. Il raggruppamento sulla query esterna garantisce che venga restituito un solo risultato per città, se più di una persona ha quel Birthyear minimo . Il ct la colonna mostrerà se esiste più di una persona nella città con quel Birthyear