Calculer la valeur de consommation par groupe dans MySQL : en fonction de la différence de la ligne précédente
Calculer la différence entre des valeurs consécutives en fonction d'un facteur de regroupement est une tâche très courante dans MySQL. Supposons que vous deviez calculer la valeur de consommation de chaque numéro de séquence (SN) en fonction de la valeur précédente.
Structure des données :
Les exemples de données contiennent la table EnergyLog
avec le schéma suivant :
<code>SN | 日期 | 值</code>
Résultats attendus :
Le but est d'étendre le tableau pour ajouter une colonne "consommation" qui représente la différence de chaque SN par rapport à la "valeur" de la ligne précédente.
Solution :
Les variables MySQL constituent un moyen pratique d'y parvenir. En utilisant des variables définies par l'utilisateur (@lastSN
et @lastValue
), nous pouvons garder une trace du SN et de la valeur précédents tout en parcourant les données.
<code class="language-sql">-- 声明变量 SELECT EL.SN, EL.日期, EL.值, IF(@lastSN = EL.SN, EL.值 - @lastValue, 0.00) AS 消耗, @lastSN := EL.SN, @lastValue := EL.值 -- 来自表 FROM EnergyLog EL, (SELECT @lastSN := 0, @lastValue := 0) AS SQLVars -- 按分组因子SN和日期排序 ORDER BY EL.SN, EL.日期;</code>
Explication :
FROM
déclare les variables (@lastSN
et @lastValue
) et les initialise à 0. EnergyLog
dans l'ordre souhaité (par SN et par date). @lastSN
. S'il y a une correspondance, calculez la consommation (différence) entre la valeur actuelle et la précédente @lastValue
. @lastSN
et @lastValue
seront mises à jour à la prochaine itération. Sortie :
SN | 日期 | 值 | 消耗 |
---|---|---|---|
2380 | 2012-10-30 | 21.01 | 0.00 |
2380 | 2012-10-31 | 22.04 | 1.03 |
2380 | 2012-11-01 | 22.65 | 0.61 |
2380 | 2012-11-02 | 23.11 | 0.46 |
20100 | 2012-10-30 | 35.21 | 0.00 |
20100 | 2012-10-31 | 37.07 | 1.86 |
20100 | 2012-11-01 | 38.17 | 1.10 |
20100 | 2012-11-02 | 38.97 | 0.80 |
20103 | 2012-10-30 | 57.98 | 0.00 |
20103 | 2012-10-31 | 60.83 | 2.85 |
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!