Betrachten Sie die folgende Tabelle mit Dokumentinformationen:
id | rev | content |
---|---|---|
1 | 1 | ... |
2 | 1 | ... |
1 | 2 | ... |
1 | 3 | ... |
Das Ziel besteht darin, eine Zeile pro ID abzurufen, die nur das Dokument mit der größten Revisionsnummer (rev) enthält. Die erwartete Ausgabe für die angegebenen Daten ist:
id | rev | content |
---|---|---|
1 | 3 | ... |
2 | 1 | ... |
Dieses Problem tritt normalerweise in SQL auf, wo der Benutzer aufgefordert wird, die Datenzeile mit dem Maximalwert in der Spalte für eine bestimmte Gruppenkennung zu finden.
Die erste Methode besteht darin, eine Unterabfrage zu erstellen, die die Gruppenkennung (id) und den Maximalwert in der Spalte „rev“ identifiziert. Diese Unterabfrage kann mithilfe einer Gleichheitsbedingung für die Gruppenkennung und den Maximalwert mit der Haupttabelle verknüpft werden.
<code class="language-sql">SELECT a.id, a.rev, a.contents FROM YourTable a INNER JOIN ( SELECT id, MAX(rev) rev FROM YourTable GROUP BY id ) b ON a.id = b.id AND a.rev = b.rev</code>
Die zweite Methode verwendet eine Left-Join-Operation, um die Tabelle mit sich selbst zu verknüpfen. Geben Sie Gleichheitsbedingungen für Gruppenkennungen (id) an. Um sicherzustellen, dass nur die Zeile mit dem größten Drehzahlwert ausgewählt wird, fügen Sie eine Bedingung hinzu, die prüft, ob der rechte Drehzahlwert kleiner als der linke Drehzahlwert ist. Wenden Sie abschließend einen Filter an, um nur Zeilen mit einem rechten Rev-Wert von NULL anzuzeigen (was anzeigt, dass ein maximaler Rev-Wert vorhanden ist).
<code class="language-sql">SELECT a.* FROM YourTable a LEFT OUTER JOIN YourTable b ON a.id = b.id AND a.rev < b.rev WHERE b.id IS NULL;</code>
Beide Lösungen liefern die gleichen Ergebnisse und sind SQL ANSI-kompatibel. Die am besten geeignete Wahl hängt von den persönlichen Vorlieben und den spezifischen Leistungsmerkmalen der Datenbank ab. Um den besten Ansatz für verschiedene Szenarien zu ermitteln, wird Benchmarking empfohlen.
Das obige ist der detaillierte Inhalt vonWie wähle ich nur Zeilen mit dem Maximalwert in einer Spalte mit SQL aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!