Här är ett sätt att göra detta, med UNION ALL
(Se SQL-fiol med demo
). Detta fungerar med två grupper, om du har fler än två grupper måste du ange group
nummer och lägg till frågor för varje 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
)
Det finns en mängd olika sätt att göra detta, se den här artikeln för att bestämma den bästa vägen för din situation:
http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/
Redigera:
Detta kan fungera för dig också, det genererar ett radnummer för varje post. Om du använder ett exempel från länken ovan returneras endast de poster med ett radnummer som är mindre än eller lika 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