Ниже приведен простейший пример, хотя любое решение должно иметь возможность масштабирования до любого количества n лучших результатов:
Учитывая таблицу, подобную приведенной ниже, со столбцами «человек», «группа» и «возраст», как бы вы могли получить 2 самых старых человека в каждой группе? (Связи внутри групп не должны приводить к большему количеству результатов, но дают первые 2 в алфавитном порядке)
+ -------- + ------- + ----- + | Человек | Группа | Возраст | + -------- + ------- + ----- + | Боб | 1 | 32 | | Джилл | 1 | 34 | | Шон | 1 | 42 | | Джейк | 2 | 29 | | Пол | 2 | 36 | | Лаура | 2 | 39 | + -------- + ------- + ----- +
Желаемый результат:
+ -------- + ------- + ----- + | Шон | 1 | 42 | | Джилл | 1 | 34 | | Лаура | 2 | 39 | | Пол | 2 | 36 | + -------- + ------- + ----- +
ПРИМЕЧАНИЕ. Этот вопрос основан на предыдущем - Получить записи с максимальным значением для каждой группы сгруппированных результатов SQL - для получения одной верхней строки из каждой группы, на который был получен отличный ответ для MySQL от @Bohemian:
select *
from (select * from mytable order by `Group`, Age desc, Person) x
group by `Group`
Хотел бы иметь возможность строить на этом, хотя я не понимаю, как.