Berikut ini salah satu cara untuk melakukannya, menggunakan UNION ALL
(Lihat SQL Fiddle dengan Demo
). Ini berfungsi dengan dua grup, jika Anda memiliki lebih dari dua grup, maka Anda perlu menentukan group
nomor dan tambahkan kueri untuk setiap 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
)
Ada berbagai cara untuk melakukannya, lihat artikel ini untuk menentukan rute terbaik untuk situasi Anda:
http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/
Sunting:
Ini mungkin bekerja untuk Anda juga, ini menghasilkan nomor baris untuk setiap catatan. Menggunakan contoh dari tautan di atas, ini hanya akan mengembalikan catatan dengan nomor baris kurang dari atau sama dengan 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;
Lihat Demo