Есть супер-простой способ сделать это в MySQL:
select *
from (select * from mytable order by `Group`, age desc, Person) x
group by `Group`
Это работает, потому что в mysql вам разрешено не агрегировать столбцы без группировки, и в этом случае mysql просто возвращает первую строку. Решение состоит в том, чтобы сначала упорядочить данные таким образом, чтобы для каждой группы сначала была указана нужная строка, а затем сгруппировать по столбцам, для которых необходимо получить значение.
Вы избегаете сложных подзапросов, которые пытаются найти max()
etc, а также проблем с возвратом нескольких строк, когда существует более одной строки с одинаковым максимальным значением (как и другие ответы)
Примечание: это решение только для mysql . Все другие известные мне базы данных будут выдавать синтаксическую ошибку SQL с сообщением «неагрегированные столбцы не перечислены в предложении group by» или аналогичными. Поскольку это решение использует недокументированное поведение, более осторожный может захотеть включить тест, чтобы утверждать, что он продолжает работать, если будущая версия MySQL изменит это поведение.
Обновление версии 5.7:
Начиная с версии 5.7, sql-mode
настройка включает ONLY_FULL_GROUP_BY
по умолчанию, поэтому для этой работы у вас не должно быть этой опции (отредактируйте файл опции для сервера, чтобы удалить эту настройку).