sql >> Base de Datos >  >> RDS >> Mysql

MySQL:seleccione N filas, pero con solo valores únicos en una columna

Probablemente no sea la solución más elegante, y el rendimiento de IN puede sufrir en mesas más grandes.

La consulta anidada obtiene el mínimo Birthyear para cada ciudad. Solo registros que tengan este Birthyear coinciden en la consulta externa. Ordenar por edad y luego limitar a 3 resultados le da a las 3 personas más viejas que también son las más viejas de su ciudad (Egon Spengler se retira...)

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

Editar - añadido GROUP BY City a la consulta externa, ya que las personas con el mismo año de nacimiento devolverían múltiples valores. La agrupación en la consulta externa garantiza que solo se devolverá un resultado por ciudad, si más de una persona tiene ese mínimo Birthyear . El ct La columna mostrará si existe más de una persona en la ciudad con ese Birthyear