Heim >Datenbank >MySQL-Tutorial >Wie simuliert man die Lag-Funktion in MySQL?

Wie simuliert man die Lag-Funktion in MySQL?

Barbara Streisand
Barbara StreisandOriginal
2025-01-18 01:01:08772Durchsuche

How to Simulate the Lag Function 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!

Stellungnahme:
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