Berechnen Sie den Verbrauchswert pro Gruppe in MySQL: basierend auf der Differenz der vorherigen Zeile
Das Berechnen der Differenz zwischen aufeinanderfolgenden Werten basierend auf einem Gruppierungsfaktor ist eine sehr häufige Aufgabe in MySQL. Angenommen, Sie müssen den Verbrauchswert jeder Sequenznummer (SN) basierend auf dem vorherigen Wert berechnen.
Datenstruktur:
Die Beispieldaten enthalten die Tabelle EnergyLog
mit dem folgenden Schema:
<code>SN | 日期 | 值</code>
Erwartete Ergebnisse:
Das Ziel besteht darin, die Tabelle um eine Spalte „Verbrauch“ zu erweitern, die die Differenz jedes SN relativ zum „Wert“ der vorherigen Zeile darstellt.
Lösung:
MySQL-Variablen bieten eine praktische Möglichkeit, dies zu erreichen. Durch die Verwendung benutzerdefinierter Variablen (@lastSN
und @lastValue
) können wir die vorherige SN und den vorherigen Wert verfolgen, während wir die Daten durchlaufen.
<code class="language-sql">-- 声明变量 SELECT EL.SN, EL.日期, EL.值, IF(@lastSN = EL.SN, EL.值 - @lastValue, 0.00) AS 消耗, @lastSN := EL.SN, @lastValue := EL.值 -- 来自表 FROM EnergyLog EL, (SELECT @lastSN := 0, @lastValue := 0) AS SQLVars -- 按分组因子SN和日期排序 ORDER BY EL.SN, EL.日期;</code>
Erklärung:
FROM
-Klausel deklariert Variablen (@lastSN
und @lastValue
) und initialisiert sie auf 0. EnergyLog
-Tabelle in der gewünschten Reihenfolge (nach SN und Datum). @lastSN
. Wenn es eine Übereinstimmung gibt, berechnen Sie den Verbrauch (Differenz) zwischen dem aktuellen Wert und dem vorherigen @lastValue
. @lastSN
und @lastValue
werden bei der nächsten Iteration aktualisiert. Ausgabe:
SN | 日期 | 值 | 消耗 |
---|---|---|---|
2380 | 2012-10-30 | 21.01 | 0.00 |
2380 | 2012-10-31 | 22.04 | 1.03 |
2380 | 2012-11-01 | 22.65 | 0.61 |
2380 | 2012-11-02 | 23.11 | 0.46 |
20100 | 2012-10-30 | 35.21 | 0.00 |
20100 | 2012-10-31 | 37.07 | 1.86 |
20100 | 2012-11-01 | 38.17 | 1.10 |
20100 | 2012-11-02 | 38.97 | 0.80 |
20103 | 2012-10-30 | 57.98 | 0.00 |
20103 | 2012-10-31 | 60.83 | 2.85 |
Das obige ist der detaillierte Inhalt vonWie berechnet man Verbrauchswerte durch Subtrahieren von der vorherigen Zeile in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!