Simuler la fonction LAG dans MySQL
Il n'y a pas de fonction LAG directe dans MySQL, mais nous pouvons intelligemment utiliser des variables définies par l'utilisateur pour simuler sa fonction et calculer la différence entre des lignes consécutives.
Supposons que nous ayons le tableau suivant :
<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>
On peut simuler la fonction LAG en utilisant la requête suivante :
<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>
Cette requête :
@quot
à -1. quote
et celle de la ligne précédente quote
(bien que la différence ne soit pas calculée directement ici, mais comment obtenir la ligne de données précédente est indiqué). quote
de la ligne actuelle dans @quot
pour l'utiliser lors de la prochaine itération. Formater les résultats
Pour obtenir le format souhaité :
<code>GOOGLE | 20 SAP | 40</code>
Nous pouvons utiliser des sous-requêtes imbriquées :
<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>
Cette requête :
quote
et stockez-la dans la colonne change
. IF
et la variable @comp
pour identifier la première ligne (LATEST=1
) de chaque groupe d'entreprises. Conclusion
La méthode ci-dessus simule efficacement la fonction LAG dans MySQL, offrant un moyen pratique et efficace pour l'analyse des données de séries chronologiques. Il convient de noter que les deux méthodes sont mises en œuvre de manière légèrement différente. La première montre plus directement comment accéder à la ligne de données précédente, tandis que la seconde se concentre davantage sur le calcul de la différence et le formatage des résultats de sortie. La méthode que vous choisissez dépend de vos besoins spécifiques.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!