L'esempio seguente è il più semplice possibile, sebbene qualsiasi soluzione dovrebbe essere in grado di scalare in base alla necessità di molti n risultati migliori:
Data una tabella come quella qui sotto, con le colonne persona, gruppo ed età, come otterresti le 2 persone più anziane in ciascun gruppo? (I legami all'interno dei gruppi non dovrebbero produrre più risultati, ma fornire i primi 2 in ordine alfabetico)
+ -------- + ------- + ----- + | Persona | Gruppo | Età | + -------- + ------- + ----- + | Bob | 1 | 32 | | Jill | 1 | 34 | | Shawn | 1 | 42 | | Jake | 2 | 29 | | Paolo | 2 | 36 | | Laura | 2 | 39 | + -------- + ------- + ----- +
Set di risultati desiderato:
+ -------- + ------- + ----- + | Shawn | 1 | 42 | | Jill | 1 | 34 | | Laura | 2 | 39 | | Paolo | 2 | 36 | + -------- + ------- + ----- +
NOTA: questa domanda si basa su una precedente. Ottieni record con il valore massimo per ciascun gruppo di risultati SQL raggruppati , per ottenere una riga superiore da ciascun gruppo e che ha ricevuto un'ottima risposta specifica per MySQL da @Bohemian:
select *
from (select * from mytable order by `Group`, Age desc, Person) x
group by `Group`
Mi piacerebbe poterlo costruire, anche se non vedo come.