Simulieren Sie die LAG-Funktion in MySQL
In MySQL gibt es keine direkte LAG-Funktion, aber wir können benutzerdefinierte Variablen geschickt verwenden, um ihre Funktion zu simulieren und die Differenz zwischen aufeinanderfolgenden Zeilen zu berechnen.
Angenommen, wir haben die folgende Tabelle:
<code>| time | company | quote | +---------------------+---------+-------+ | 0000-00-00 00:00:00 | GOOGLE | 40 | | 2012-07-02 21:28:05 | GOOGLE | 60 | | 2012-07-02 21:28:51 | SAP | 60 | | 2012-07-02 21:29:05 | SAP | 20 |</code>
Wir können die LAG-Funktion mit der folgenden Abfrage simulieren:
<code class="language-sql">SET @quot=-1; SELECT time, company, @quot AS lag_quote, @quot:=quote AS curr_quote FROM stocks ORDER BY company, time;</code>
Diese Abfrage:
@quot
auf -1 initialisieren. quote
und der vorherigen Zeile quote
(obwohl die Differenz hier nicht direkt berechnet wird, wird gezeigt, wie Sie die vorherige Datenzeile erhalten). quote
-Wert der aktuellen Zeile in @quot
zur Verwendung in der nächsten Iteration. Ergebnisse formatieren
Um das gewünschte Format zu erhalten:
<code>GOOGLE | 20 SAP | 40</code>
Wir können verschachtelte Unterabfragen verwenden:
<code class="language-sql">SET @quot=0,@latest=0,company=''; SELECT B.* FROM ( SELECT A.time, A.change, IF(@comp=A.company, 0, 1) AS LATEST, @comp:=A.company AS company FROM ( SELECT time, company, quote - @quot AS change, @quot:=quote AS curr_quote FROM stocks ORDER BY company, time ) A ORDER BY company, time DESC ) B WHERE B.LATEST = 1;</code>
Diese Abfrage:
quote
und speichern Sie sie in der Spalte change
. IF
-Anweisung und die Variable @comp
, um die erste Zeile (LATEST=1
) in jeder Unternehmensgruppierung zu identifizieren. Fazit
Die obige Methode simuliert effektiv die LAG-Funktion in MySQL und bietet eine praktische und effiziente Möglichkeit für die Analyse von Zeitreihendaten. Es ist zu beachten, dass die beiden Methoden auf leicht unterschiedliche Weise implementiert werden. Die erste Methode zeigt direkter, wie auf die vorherige Datenzeile zugegriffen wird, während sich die zweite Methode mehr auf die Berechnung der Differenz und die Formatierung der Ausgabeergebnisse konzentriert. Welche Methode Sie wählen, hängt von Ihren spezifischen Bedürfnissen ab.
Das obige ist der detaillierte Inhalt vonWie kann ich die LAG-Funktion in MySQL simulieren, um Unterschiede zwischen aufeinanderfolgenden Zeilen zu berechnen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!