Berechnen von Unterschieden zwischen aufeinanderfolgenden Zeilen in SQL Server 2005
Diese Anleitung zeigt, wie Sie die Differenz zwischen aufeinanderfolgenden Zeilenwerten innerhalb einer SQL Server 2005-Tabelle berechnen. Die Lösung nutzt einen Self-Join, um diese Berechnung effizient durchzuführen.
Hier ist die SQL-Abfrage:
<code class="language-sql">SELECT c.rowInt, c.Value, ISNULL(n.Value, 0) - c.Value AS Diff FROM sourceTable AS c LEFT JOIN sourceTable AS n ON n.rowInt = (SELECT MIN(rowInt) FROM sourceTable WHERE rowInt > c.rowInt)</code>
Diese Abfrage führt eine Linksverknüpfung des sourceTable
(Alias als c
für „aktuell“) mit sich selbst (Alias als n
für „nächste“) durch. Die Join-Bedingung n.rowInt = (SELECT MIN(rowInt) FROM sourceTable WHERE rowInt > c.rowInt)
findet die nächste Zeile basierend auf der Spalte rowInt
und stellt so die richtige Reihenfolge sicher. ISNULL(n.Value, 0)
behandelt Fälle, in denen es keine nächste Zeile gibt, und verhindert so Fehler. Die Differenz wird als n.Value - c.Value
berechnet und mit dem Alias Diff
versehen.
Beispiel:
Betrachten Sie dieses Beispiel sourceTable
:
rowInt | Value |
---|---|
2 | 23 |
3 | 45 |
9 | 0 |
17 | 10 |
Die Ausgabe der Abfrage wäre:
rowInt | Value | Diff |
---|---|---|
2 | 23 | 22 |
3 | 45 | -45 |
9 | 0 | 10 |
17 | 10 | 0 |
Die Spalte Diff
zeigt die Differenz zwischen dem Value
der aktuellen Zeile und dem Value
der nächsten Zeile. Beachten Sie, dass die Differenz der letzten Zeile 0 beträgt, da es keine nachfolgende Zeile gibt.
Das obige ist der detaillierte Inhalt vonWie berechnet man die Differenz zwischen aufeinanderfolgenden Zeilenwerten in SQL Server 2005?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!