L'exemple suivant est le plus simple possible, même si toute solution doit être capable de s'adapter au nombre de n résultats supérieurs nécessaires:
Étant donné un tableau comme celui-ci ci-dessous, avec des colonnes de personne, de groupe et d'âge, comment obtiendriez-vous les 2 personnes les plus âgées de chaque groupe? (Les égalités au sein des groupes ne devraient pas donner plus de résultats, mais donner les 2 premiers par ordre alphabétique)
+ -------- + ------- + ----- + | Personne | Groupe | Age | + -------- + ------- + ----- + | Bob | 1 | 32 | | Jill | 1 | 34 | | Shawn | 1 | 42 | | Jake | 2 | 29 | | Paul | 2 | 36 | | Laura | 2 | 39 | + -------- + ------- + ----- +
Ensemble de résultats souhaité:
+ -------- + ------- + ----- + | Shawn | 1 | 42 | | Jill | 1 | 34 | | Laura | 2 | 39 | | Paul | 2 | 36 | + -------- + ------- + ----- +
REMARQUE: Cette question s'appuie sur une précédente - Obtenir des enregistrements avec une valeur maximale pour chaque groupe de résultats SQL groupés - pour obtenir une seule ligne supérieure de chaque groupe, et qui a reçu une excellente réponse spécifique à MySQL de @Bohemian:
select *
from (select * from mytable order by `Group`, Age desc, Person) x
group by `Group`
J'adorerais pouvoir développer cela, même si je ne vois pas comment.