Poniżej przedstawiono najprostszy możliwy przykład, chociaż każde rozwiązanie powinno być w stanie skalować do dowolnej liczby n najlepszych wyników:
Biorąc pod uwagę poniższą tabelę z kolumnami osoby, grupy i wieku, w jaki sposób można uzyskać 2 najstarsze osoby w każdej grupie? (Remisy w grupach nie powinny dawać więcej wyników, ale należy podać pierwsze 2 w kolejności alfabetycznej)
+ -------- + ------- + ----- + | Osoba | Grupa | Wiek | + -------- + ------- + ----- + | Bob | 1 | 32 | | Jill | 1 | 34 | | Shawn | 1 | 42 | | Jake | 2 | 29 | | Paul | 2 | 36 | | Laura | 2 | 39 | + -------- + ------- + ----- +
Pożądany zestaw wyników:
+ -------- + ------- + ----- + | Shawn | 1 | 42 | | Jill | 1 | 34 | | Laura | 2 | 39 | | Paul | 2 | 36 | + -------- + ------- + ----- +
UWAGA: To pytanie opiera się na poprzednim - Uzyskaj rekordy z maksymalną wartością dla każdej grupy zgrupowanych wyników SQL - aby uzyskać pojedynczy górny wiersz z każdej grupy i który otrzymał świetną odpowiedź specyficzną dla MySQL od @Bohemian:
select *
from (select * from mytable order by `Group`, Age desc, Person) x
group by `Group`
Chciałbym móc to zbudować, chociaż nie wiem jak.