Maison >base de données >tutoriel mysql >Comment puis-je simuler une fonction de décalage dans MySQL pour calculer les différences entre les valeurs successives ?
Fonction de simulation de décalage dans MySQL
Le calcul de la différence entre des valeurs consécutives dans une série temporelle (appelée décalage) peut être implémenté dans MySQL à l'aide d'une solution de contournement intelligente. Pour comprendre cette technique, considérons le tableau fourni :
<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>
Pour simuler la fonction lag et calculer la différence entre guillemets, nous adoptons la stratégie suivante :
@quot
a une valeur initiale de -1 et @curr_quote
est utilisé pour suivre la valeur de cotation actuelle. <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>
lag_quote
contient désormais la valeur de l'enchère de la ligne précédente et curr_quote
contient la valeur de l'enchère de la ligne actuelle. Pour obtenir le format de sortie souhaité (différences entreprise et devis) :
<code>GOOGLE | 20 SAP | 40</code>
Nous utilisons des 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,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>
Cette méthode simule efficacement une fonction de décalage en conservant une variable de session qui garde une trace de la valeur de la ligne précédente. Même si cela semble gourmand en calcul, les requêtes imbriquées ne sont pas liées les unes aux autres, ce qui reste relativement efficace.
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!