Maison >base de données >tutoriel mysql >Comment calculer la consommation en soustrayant les valeurs des lignes précédentes dans MySQL, regroupées par SN ?

Comment calculer la consommation en soustrayant les valeurs des lignes précédentes dans MySQL, regroupées par SN ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-10 11:41:42120parcourir

How to Calculate Consumption by Subtracting Previous Row Values in MySQL, Grouped by SN?

Calcul de la consommation dans MySQL : soustraction des valeurs de la ligne précédente, regroupées par SN

Ce guide montre comment calculer la consommation en comparant des valeurs consécutives au sein de chaque SN groupe dans une table MySQL. Les données comprennent les colonnes SN (numéro de série) et Value, représentant les mesures au fil du temps. Le but est de calculer la consommation de chaque SN en soustrayant la valeur précédente de la valeur actuelle.

Voici une requête MySQL exploitant des variables définies par l'utilisateur pour y parvenir :

<code class="language-sql">SELECT
  EL.SN,
  EL.Date,
  EL.Value,
  IF(@lastSN = EL.SN, EL.Value - @lastValue, 0.00) AS Consumption,
  @lastSN := EL.SN,
  @lastValue := EL.Value
FROM
  EnergyLog EL,
  (SELECT @lastSN := NULL, @lastValue := NULL) AS SQLVars
ORDER BY
  EL.SN,
  EL.Date;</code>

Explication de la requête :

  1. Initialisation des variables : La sous-requête (SELECT @lastSN := NULL, @lastValue := NULL) AS SQLVars initialise les variables définies par l'utilisateur @lastSN (pour suivre le SN précédent) et @lastValue (pour suivre le Value précédent) à NULL. L'utilisation de NULL au lieu de 0 gère correctement la première ligne de chaque groupe SN.

  2. Traitement ligne par ligne : La requête principale parcourt la table EnergyLog (alias EL), classée par SN et Date.

  3. Calcul de la consommation : L'instruction IF vérifie si le SN (EL.SN) actuel correspond au SN (@lastSN) précédemment traité.

    • S'ils correspondent, il calcule la consommation comme EL.Value - @lastValue.
    • S'ils ne correspondent pas (c'est-à-dire un nouveau SN groupe), il fixe la consommation à 0,00.
  4. Mise à jour des variables : @lastSN := EL.SN et @lastValue := EL.Value mettent à jour les variables pour la comparaison de la ligne suivante.

  5. Sortie : La requête renvoie les SN, Date, Value et calculés Consumption pour chaque ligne.

Cette approche calcule efficacement la consommation au sein de chaque SN groupe à l'aide d'une seule requête, éliminant ainsi le besoin de sous-requêtes ou de jointures plus complexes. L'utilisation de variables définies par l'utilisateur rend le calcul concis et performant.

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!

Déclaration:
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