Ecco un modo per farlo, usando UNION ALL
(Vedi SQL Fiddle con demo
). Funziona con due gruppi, se hai più di due gruppi, dovresti specificare il group
numero e aggiungi query per ogni 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
)
Esistono diversi modi per farlo, consulta questo articolo per determinare il percorso migliore per la tua situazione:
http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/
Modifica:
Questo potrebbe funzionare anche per te, genera un numero di riga per ogni record. Utilizzando un esempio dal collegamento sopra, verranno restituiti solo i record con un numero di riga inferiore o uguale 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;
Vedi Demo