A seguir, é apresentado o exemplo mais simples possível, embora qualquer solução deva ser dimensionada para o máximo de n resultados necessários:
Dada uma tabela como essa abaixo, com colunas de pessoa, grupo e faixa etária, como você obteria as 2 pessoas mais velhas de cada grupo? (Os laços dentro dos grupos não devem produzir mais resultados, mas fornecer os 2 primeiros em ordem alfabética)
+ -------- + ------- + ----- + | Pessoa Grupo | Idade + -------- + ------- + ----- + | Bob 1 | 32 | Jill 1 | 34 | Shawn 1 | 42 | Jake 2 29 | Paul 2 36 | Laura 2 39 + -------- + ------- + ----- +
Conjunto de resultados desejado:
+ -------- + ------- + ----- + | Shawn 1 | 42 | Jill 1 | 34 | Laura 2 39 | Paul 2 36 + -------- + ------- + ----- +
NOTA: Esta pergunta baseia-se em uma anterior - Obter registros com valor máximo para cada grupo de resultados SQL agrupados - para obter uma única linha superior de cada grupo e que recebeu uma ótima resposta específica do MySQL do @Bohemian:
select *
from (select * from mytable order by `Group`, Age desc, Person) x
group by `Group`
Adoraria ser capaz de construir isso, embora eu não veja como.