La solución correcta es:
SELECT o.*
FROM `Persons` o # 'o' from 'oldest person in group'
LEFT JOIN `Persons` b # 'b' from 'bigger age'
ON o.Group = b.Group AND o.Age < b.Age
WHERE b.Age is NULL # bigger age not found
Cómo funciona:
Coincide con cada fila desde o con todas las filas desde b teniendo el mismo valor en la columna Group y un valor mayor en la columna Age . Cualquier fila desde o no tener el valor máximo de su grupo en la columna Age coincidirá con una o más filas de b .
El LEFT JOIN hace que coincida con la persona más antigua del grupo (incluidas las personas que están solas en su grupo) con una fila llena de NULL s de b ('sin mayor edad en el grupo').
Uso de INNER JOIN hace que estas filas no coincidan y se ignoran.
El WHERE cláusula mantiene sólo las filas que tienen NULL s en los campos extraídos de b . Son las personas más viejas de cada grupo.
Lecturas adicionales
Esta solución y muchas otras se explican en el libro Antipatrones SQL:Cómo evitar las trampas de la programación de bases de datos