Das Folgende ist das einfachste mögliche Beispiel, obwohl jede Lösung in der Lage sein sollte, auf so viele n Top-Ergebnisse zu skalieren, die benötigt werden:
Wie würden Sie bei einer folgenden Tabelle mit Spalten für Personen, Gruppen und Alter die beiden ältesten Personen in jeder Gruppe ermitteln? (Bindungen innerhalb von Gruppen sollten nicht zu mehr Ergebnissen führen, sondern die ersten 2 in alphabetischer Reihenfolge)
+ -------- + ------- + ----- + | Person | Gruppe | Alter | + -------- + ------- + ----- + | Bob | 1 | 32 | | Jill | 1 | 34 | | Shawn | 1 | 42 | | Jake | 2 | 29 | | Paul | 2 | 36 | | Laura | 2 | 39 | + -------- + ------- + ----- +
Gewünschte Ergebnismenge:
+ -------- + ------- + ----- + | Shawn | 1 | 42 | | Jill | 1 | 34 | | Laura | 2 | 39 | | Paul | 2 | 36 | + -------- + ------- + ----- +
ANMERKUNG: Diese Frage baut auf einer früheren Frage auf: Abrufen von Datensätzen mit maximalem Wert für jede Gruppe gruppierter SQL-Ergebnisse - zum Abrufen einer einzelnen oberen Zeile aus jeder Gruppe, die von @Bohemian eine hervorragende MySQL-spezifische Antwort erhalten hat:
select *
from (select * from mytable order by `Group`, Age desc, Person) x
group by `Group`
Würde gerne in der Lage sein, dies auszubauen, obwohl ich nicht sehe, wie.