Aqui está uma maneira de fazer isso, usando
UNION ALL
(Consulte SQL Fiddle with Demo
). Isso funciona com dois grupos, se você tiver mais de dois grupos, precisará especificar o group
número e adicionar consultas para cada group
:(
select *
from mytable
where `group` = 1
order by age desc
LIMIT 2
)
UNION ALL
(
select *
from mytable
where `group` = 2
order by age desc
LIMIT 2
)
Existem várias maneiras de fazer isso, consulte este artigo para determinar a melhor rota para sua situação:
http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/
Editar:
Isso pode funcionar para você também, pois gera um número de linha para cada registro. Usando um exemplo do link acima, isso retornará apenas os registros com um número de linha menor ou igual a 2:
select person, `group`, age
from
(
select person, `group`, age,
(@num:=if(@group = `group`, @num +1, if(@group := `group`, 1, 1))) row_number
from test t
CROSS JOIN (select @num:=0, @group:=null) c
order by `Group`, Age desc, person
) as x
where x.row_number <= 2;
Veja Demonstração