Ниже приведен самый простой пример, хотя любое решение должно иметь возможность масштабирования, однако необходимо, чтобы было достигнуто много n лучших результатов:
Учитывая таблицу, подобную приведенной ниже, с колонками "человек", "группа" и "возраст", как бы вы получили 2 самых старых человека в каждой группе? (Связи внутри групп не должны давать больше результатов, но давать первые 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 | +--------+-------+-----+
ПРИМЕЧАНИЕ. Этот вопрос основывается на предыдущем - Получить записи с максимальным значением для каждой группы сгруппированных SQL-результатов - для получения один верхний ряд из каждой группы, и который получил большой ответ на MySQL от @Bohemian:
select *
from (select * from mytable order by `Group`, Age desc, Person) x
group by `Group`
Хотелось бы с этим справиться, хотя я не понимаю, как это сделать.