Zde je jeden způsob, jak toho dosáhnout, pomocí UNION ALL
(Viz SQL Fiddle s ukázkou
). Funguje to se dvěma skupinami, pokud máte více než dvě skupiny, budete muset zadat group
číslo a přidejte dotazy pro každou 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
)
Existuje celá řada způsobů, jak toho dosáhnout, v tomto článku najdete nejlepší trasu pro vaši situaci:
http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/
Upravit:
To by mohlo fungovat i pro vás, vygeneruje to číslo řádku pro každý záznam. Použití příkladu z výše uvedeného odkazu vrátí pouze záznamy s číslem řádku menším nebo rovným 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;
Viz Ukázka