Maison > base de données > tutoriel mysql > Comment calculer les valeurs de consommation en soustrayant de la ligne précédente dans MySQL ?

Comment calculer les valeurs de consommation en soustrayant de la ligne précédente dans MySQL ?

Patricia Arquette
Libérer: 2025-01-10 12:01:43
original
549 Les gens l'ont consulté

How to Calculate Consumption Values by Subtracting from the Previous Row in MySQL?

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>
Copier après la connexion

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>
Copier après la connexion

Explication :

    La clause
  • FROM déclare les variables (@lastSN et @lastValue) et les initialise à 0.
  • La requête parcourt la table EnergyLog dans l'ordre souhaité (par SN et par date).
  • Il compare le SN actuel avec @lastSN. S'il y a une correspondance, calculez la consommation (différence) entre la valeur actuelle et la précédente @lastValue.
  • Si SN est différent, supposez un nouveau groupe et remettez la consommation à 0.
  • Les variables
  • @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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal