UNION ALL
を使用して、これを行う1つの方法を次に示します。 ( SQL Fiddle withDemo
を参照してください。 )。これは2つのグループで機能します。3つ以上のグループがある場合は、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;
デモ をご覧ください。