Obtenir des n premiers enregistrements pour chaque groupe de résultats groupés

Suivantes est la plus simple possible exemple, bien que toute solution devrait être en mesure à l'échelle par le nombre n d'obtenir les meilleurs résultats sont nécessaires:

Donné un tableau comme celui ci-dessous, avec la personne, le groupe et l'âge des colonnes, comment voulez-vous obtenir les 2 plus anciens de personnes dans chaque groupe? (Les liens au sein de groupes ne doivent pas céder plus de résultats, mais de donner les 2 premiers dans l'ordre alphabétique)

+--------+-------+-----+ 
| Personne | Groupe | Âge | 
+--------+-------+-----+ 
| Bob| 1 | 32 | 
| Jill| 1 | 34 | 
| Shawn| 1 | 42 | 
| Jake| 2 | 29 | 
| Paul| 2 | 36 | 
| Laura| 2 | 39 | 
+--------+-------+-----+ 

Résultats souhaités:

+--------+-------+-----+ 
| Shawn| 1 | 42 | 
| Jill| 1 | 34 | 
| Laura| 2 | 39 | 
| Paul| 2 | 36 | 
+--------+-------+-----+ 

REMARQUE: Cette question s'appuie sur un précédent- Obtenir des enregistrements avec valeur maximale pour chaque groupe d'regroupés les résultats SQL - pour l'obtention d'une seule rangée du haut, de chaque groupe, et qui a reçu une grande spécifique à MySQL réponse de @Bohème:

select * 
from (select * from mytable order by `Group`, Age desc, Person) x
group by `Group`

Aimerais être en mesure de construire ce, bien que je ne vois pas comment.

stackoverflow.com/questions/11158917/get-n-per-group-mysql et stackoverflow.com/questions/2129693/... pourrait vous aider
Cochez cette exemple. Il est assez proche de ce que vous demandez: stackoverflow.com/questions/1537606/...

OriginalL'auteur Yarin | 2012-08-24