Hier ist eine Möglichkeit, dies zu tun, indem Sie UNION ALL
verwenden (Siehe SQL Fiddle mit Demo
). Dies funktioniert mit zwei Gruppen, wenn Sie mehr als zwei Gruppen haben, müssen Sie die group
angeben Nummer und fügen Sie Abfragen für jede group
hinzu :
(
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
)
Es gibt verschiedene Möglichkeiten, dies zu tun. Lesen Sie diesen Artikel, um die beste Route für Ihre Situation zu ermitteln:
http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/
Bearbeiten:
Dies könnte auch für Sie funktionieren, es generiert eine Zeilennummer für jeden Datensatz. Anhand eines Beispiels aus dem obigen Link werden nur die Datensätze mit einer Zeilennummer kleiner oder gleich 2 zurückgegeben:
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;
Siehe Demo