Aquí hay una forma de hacer esto, usando UNION ALL
(Consulte SQL Fiddle con demostración
). Esto funciona con dos grupos, si tiene más de dos grupos, deberá especificar el group
número y agregar consultas para cada 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
)
Hay una variedad de formas de hacer esto, consulte este artículo para determinar la mejor ruta para su situación:
http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/
Editar:
Esto también podría funcionar para usted, genera un número de fila para cada registro. Usando un ejemplo del enlace anterior, esto devolverá solo aquellos registros con un número de fila menor o igual a 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;
Ver Demostración