Her er en måde at gøre dette på ved at bruge UNION ALL
(Se SQL Fiddle with Demo
). Dette fungerer med to grupper, hvis du har mere end to grupper, skal du angive group
nummer og tilføj forespørgsler for hver 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
)
Der er en række måder at gøre dette på. Se denne artikel for at finde den bedste rute for din situation:
http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/
Rediger:
Dette fungerer muligvis også for dig, det genererer et rækkenummer for hver post. Ved at bruge et eksempel fra linket ovenfor vil dette kun returnere de poster med et rækkenummer på mindre end eller lig med 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;
Se demo