Ето един начин да направите това, като използвате UNION ALL
(Вижте SQL Fiddle с демонстрация
). Това работи с две групи, ако имате повече от две групи, тогава ще трябва да посочите group
номер и добавете заявки за всяка 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
)
Има различни начини да направите това, вижте тази статия, за да определите най-добрия маршрут за вашата ситуация:
http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/
Редактиране:
Това може да работи и за вас, генерира номер на ред за всеки запис. Използвайки пример от връзката по-горе, това ще върне само онези записи с номер на ред, по-малък или равен на 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;
Вижте Демо