Heim > Datenbank > MySQL-Tutorial > Wie berechnet man Energieverbrauchsunterschiede zwischen aufeinanderfolgenden Zeilen in MySQL von SN?

Wie berechnet man Energieverbrauchsunterschiede zwischen aufeinanderfolgenden Zeilen in MySQL von SN?

Patricia Arquette
Freigeben: 2025-01-10 12:03:43
Original
295 Leute haben es durchsucht

How to Calculate Energy Consumption Differences Between Consecutive Rows in MySQL by SN?

MySQL: Berechnung der Energieverbrauchsunterschiede zwischen aufeinanderfolgenden Zeilen anhand der Seriennummer (SN)

Dieses Dokument beschreibt eine Methode zur Berechnung der Differenz im Energieverbrauch zwischen aufeinanderfolgenden Zeilen in einer MySQL-Datenbank, gruppiert nach Seriennummer (SN).

Problem:

Anhand einer Tabelle mit Energieverbrauchsdaten besteht das Ziel darin, die Verbrauchsdifferenz für jede SN zu berechnen, die die Änderung zwischen dem aktuellen und dem vorherigen Wert für diese bestimmte SN darstellt.

Beispieldaten:

Die folgende Tabelle (EnergyLog) veranschaulicht die anfängliche Datenstruktur:

SN Date Value
2380 2012-10-30 00:15:51 21.01
2380 2012-10-31 00:31:03 22.04
2380 2012-11-01 00:16:02 22.65
2380 2012-11-02 00:15:32 23.11
20100 2012-10-30 00:15:38 35.21
20100 2012-10-31 00:15:48 37.07
20100 2012-11-01 00:15:49 38.17
20100 2012-11-02 00:15:19 38.97
20103 2012-10-30 10:27:34 57.98
20103 2012-10-31 12:24:42 60.83

Gewünschte Ausgabe:

Die Abfrage sollte eine Tabelle mit einer hinzugefügten Consumption-Spalte erzeugen:

SN Date Value Consumption
2380 2012-10-30 00:15:51 21.01 0.00
2380 2012-10-31 00:31:03 22.04 1.03
2380 2012-11-01 00:16:02 22.65 0.61
2380 2012-11-02 00:15:32 23.11 0.46
20100 2012-10-30 00:15:38 35.21 0.00
20100 2012-10-31 00:15:48 37.07 1.86
20100 2012-11-01 00:15:49 38.17 1.10
20100 2012-11-02 00:15:19 38.97 0.80
20103 2012-10-30 10:27:34 57.98 0.00
20103 2012-10-31 12:24:42 60.83 2.85

SQL-Lösung:

Die folgende SQL-Abfrage verwendet benutzerdefinierte Variablen, um das gewünschte Ergebnis zu erzielen:

<code class="language-sql">SELECT
    EL.SN,
    EL.Date,
    EL.Value,
    IF(@lastSN = EL.SN, EL.Value - @lastValue, 0.00) AS Consumption,
    @lastSN := EL.SN,
    @lastValue := EL.Value
FROM
    EnergyLog EL,
    (SELECT @lastSN := 0, @lastValue := 0) AS SQLVars
ORDER BY
    EL.SN,
    EL.Date;</code>
Nach dem Login kopieren

Erklärung:

  • @lastSN und @lastValue: Dies sind benutzerdefinierte Variablen, die auf 0 initialisiert werden. @lastSN verfolgt die zuletzt verarbeitete SN und @lastValue speichert den zuletzt verarbeiteten Wert.
  • IF(@lastSN = EL.SN, EL.Value - @lastValue, 0.00): Diese bedingte Anweisung prüft, ob die aktuelle SN mit der vorherigen SN übereinstimmt. Wenn dies der Fall ist, wird die Verbrauchsdifferenz berechnet. Andernfalls wird der Verbrauch auf 0,00 gesetzt (für den ersten Eintrag jeder SN).
  • @lastSN := EL.SN, @lastValue := EL.Value: Diese Zuweisungen aktualisieren die benutzerdefinierten Variablen nach der Verarbeitung jeder Zeile.
  • ORDER BY EL.SN, EL.Date: Diese Klausel stellt sicher, dass die Zeilen in der richtigen Reihenfolge (nach SN und dann nach Datum) verarbeitet werden, um genaue Differenzberechnungen zu ermöglichen.

Dieser Ansatz berechnet effizient die Energieverbrauchsdifferenz für jede SN, indem er die Variablenverarbeitungsfunktionen von MySQL nutzt. Die Verwendung von ORDER BY ist entscheidend für die Richtigkeit der Ergebnisse.

Das obige ist der detaillierte Inhalt vonWie berechnet man Energieverbrauchsunterschiede zwischen aufeinanderfolgenden Zeilen in MySQL von SN?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage