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