Heim >Datenbank >MySQL-Tutorial >Wie simuliert man die Lag-Funktion in MySQL?
LAG-Funktion in MySQL simulieren
MySQL unterstützt die Funktion LAG() nicht nativ, die normalerweise zur Berechnung der Differenz zwischen dem aktuellen Zeilenwert und dem vorherigen Zeilenwert verwendet wird. Wir können dieses Problem jedoch mithilfe von MySQL-Variablen gut lösen.
Werfen wir einen Blick auf den bereitgestellten Beispieldatensatz:
<code>| 时间 | 公司 | 报价 | +---------------------+---------+-------+ | 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>
Um die LAG()-Funktion zu simulieren, können wir die folgende Abfrage verwenden:
<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 verwendet die MySQL-Variable @quot
, um den in Anführungszeichen gesetzten Wert der vorherigen Zeile zu speichern. Indem wir curr_quote
den in Anführungszeichen gesetzten Wert der aktuellen Zeile zuweisen, können wir die Differenz zwischen ihnen berechnen.
Ergebnis:
<code>| 时间 | 公司 | lag_quote | curr_quote | +---------------------+---------+----------+-----------+ | 0000-00-00 00:00:00 | GOOGLE | -1 | 40 | | 2012-07-02 21:28:05 | GOOGLE | 40 | 60 | | 2012-07-02 21:28:51 | SAP | -1 | 60 | | 2012-07-02 21:29:05 | SAP | 60 | 20 |</code>
Um das gewünschte Ausgabeformat zu erhalten:
<code>GOOGLE | 20 SAP | 40</code>
Verwenden Sie die folgende Abfrage:
<code class="language-sql">SET @quot = 0, @latest = 0, @comp = ''; SELECT B.* FROM ( SELECT A.time, A.change, IF(@comp = A.company, 1, 0) 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>
Ergebnis:
<code>| 时间 | 公司 | change | +---------------------+---------+-------+ | 2012-07-02 21:28:05 | GOOGLE | 20 | | 2012-07-02 21:29:05 | SAP | -40 |</code>
Bitte beachten Sie, dass der Änderungswert von SAP im Ergebnis der zweiten Abfrage -40 statt 40 beträgt. Dies stimmt nicht mit den Ergebnissen des Originalartikels überein. Möglicherweise liegt ein Problem mit der zweiten Abfrage des Originalartikels vor. Der obige Code behebt diesen Fehler und simuliert das Verhalten der LAG-Funktion genauer.
Das obige ist der detaillierte Inhalt vonWie simuliert man die Lag-Funktion in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!