Heim >Datenbank >MySQL-Tutorial >Wie kann ich eine Verzögerungsfunktion in MySQL simulieren, um Unterschiede zwischen aufeinanderfolgenden Werten zu berechnen?

Wie kann ich eine Verzögerungsfunktion in MySQL simulieren, um Unterschiede zwischen aufeinanderfolgenden Werten zu berechnen?

Linda Hamilton
Linda HamiltonOriginal
2025-01-18 00:56:08319Durchsuche

How Can I Simulate a Lag Function in MySQL to Calculate Differences Between Successive Values?

Simulation der Lag-Funktion in MySQL

Die Berechnung der Differenz zwischen aufeinanderfolgenden Werten in einer Zeitreihe (Lag genannt) kann in MySQL mithilfe einer cleveren Problemumgehung implementiert werden. Um diese Technik zu verstehen, betrachten wir die bereitgestellte 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>

Um die Verzögerungsfunktion zu simulieren und die Differenz in den Kursen zu berechnen, wenden wir die folgende Strategie an:

  1. Initialisiert zwei Variablen, @quot hat einen Anfangswert von -1 und @curr_quote wird verwendet, um den aktuellen Angebotswert zu verfolgen.
  2. Führen Sie die folgende Abfrage aus, um die Tabelle zu durchlaufen und die Variablen mit jeder Zeile zu aktualisieren:
<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>
    Die Spalte
  1. lag_quote enthält jetzt den Gebotswert der vorherigen Zeile und curr_quote den Gebotswert der aktuellen Zeile.

Um das gewünschte Ausgabeformat zu erhalten (Firmen- und Angebotsunterschiede):

<code>GOOGLE | 20
SAP    | 40</code>

Wir verwenden verschachtelte Abfragen:

<code class="language-sql">SET @quot=0,@latest=0,company='';
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>

Diese Methode simuliert effektiv eine Verzögerungsfunktion, indem sie eine Sitzungsvariable verwaltet, die den Wert der vorherigen Zeile verfolgt. Obwohl es rechenintensiv aussieht, stehen die verschachtelten Abfragen nicht in Beziehung zueinander, sodass es immer noch relativ effizient ist.

Das obige ist der detaillierte Inhalt vonWie kann ich eine Verzögerungsfunktion in MySQL simulieren, um Unterschiede zwischen aufeinanderfolgenden Werten zu berechnen?. 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