Получить лучшие n записей для каждой группы сгруппированных результатов
Ниже приведен простейший возможный пример, хотя любое решение должно быть в состоянии масштабироваться до любого количества необходимых результатов:
Учитывая приведенную ниже таблицу с столбцами персонажа, группы и возраста, как бы выget the 2 oldest people in each group? (Связи внутри групп не должны давать больше результатов, но дают первые 2 в алфавитном порядке)
+--------+-------+-----+ | Person | Group | Age | +--------+-------+-----+ | Bob | 1 | 32 | | Jill | 1 | 34 | | Shawn | 1 | 42 | | Jake | 2 | 29 | | Paul | 2 | 36 | | Laura | 2 | 39 | +--------+-------+-----+
Требуемый набор результатов:
+--------+-------+-----+ | Shawn | 1 | 42 | | Jill | 1 | 34 | | Laura | 2 | 39 | | Paul | 2 | 36 | +--------+-------+-----+
NOTE: Этот вопрос основан на предыдущемПолучить записи с максимальным значением для каждой группы сгруппированных результатов SQL - для получения по одной верхней строке от каждой группы и получения отличного специфичного для MySQL ответа от @Bohemian:
select *
from (select * from mytable order by `Group`, Age desc, Person) x
group by `Group`
Хотелось бы иметь возможность построить это, хотя я не понимаю, как.