Hier is een manier om dit te doen, met behulp van UNION ALL
(Zie SQL Fiddle met demo
). Dit werkt met twee groepen, als u meer dan twee groepen heeft, moet u de group
specificeren nummer en voeg zoekopdrachten toe voor elke 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
)
Er zijn verschillende manieren om dit te doen, zie dit artikel om de beste route voor uw situatie te bepalen:
http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/
Bewerken:
Dit kan ook voor u werken, het genereert een rijnummer voor elk record. Als u een voorbeeld uit de bovenstaande link gebruikt, worden alleen die records geretourneerd met een rijnummer kleiner dan of gelijk aan 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;
Zie Demo