El siguiente es el ejemplo más simple posible, aunque cualquier solución debería poder escalar a la cantidad de n resultados necesarios:
Dada una tabla como la siguiente, con columnas de persona, grupo y edad, ¿cómo obtendría las 2 personas más viejas en cada grupo? (Los lazos dentro de los grupos no deberían arrojar más resultados, sino dar los 2 primeros en orden alfabético)
+ -------- + ------- + ----- + El | Persona | Grupo | Edad | + -------- + ------- + ----- + El | Bob | 1 | 32 El | Jill 1 | 34 El | Shawn 1 | 42 | El | Jake 2 | 29 | El | Paul | 2 | 36 El | Laura | 2 | 39 + -------- + ------- + ----- +
Conjunto de resultados deseado:
+ -------- + ------- + ----- + El | Shawn 1 | 42 | El | Jill 1 | 34 El | Laura | 2 | 39 El | Paul | 2 | 36 + -------- + ------- + ----- +
NOTA: Esta pregunta se basa en una anterior: obtenga registros con el valor máximo para cada grupo de resultados SQL agrupados , para obtener una sola fila superior de cada grupo y que recibió una gran respuesta específica de MySQL de @Bohemian:
select *
from (select * from mytable order by `Group`, Age desc, Person) x
group by `Group`
Me encantaría poder construir a partir de esto, aunque no veo cómo.