Maison > base de données > tutoriel mysql > Comment calculer les différences de consommation d'énergie entre les lignes consécutives dans MySQL par SN ?

Comment calculer les différences de consommation d'énergie entre les lignes consécutives dans MySQL par SN ?

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

How to Calculate Energy Consumption Differences Between Consecutive Rows in MySQL by SN?

MySQL : Calcul des différences de consommation d'énergie entre les lignes consécutives par numéro de série (SN)

Ce document présente une méthode pour calculer la différence de consommation d'énergie entre des lignes consécutives dans une base de données MySQL, regroupées par numéro de série (SN).

Problème :

À partir d'un tableau contenant des données de consommation d'énergie, l'objectif est de calculer la différence de consommation pour chaque SN, représentant le changement entre la valeur actuelle et la valeur précédente pour ce SN spécifique.

Exemples de données :

Le tableau suivant (EnergyLog) illustre la structure initiale des données :

SN Date Value
2380 2012-10-30 00:15:51 21.01
2380 2012-10-31 00:31:03 22.04
2380 2012-11-01 00:16:02 22.65
2380 2012-11-02 00:15:32 23.11
20100 2012-10-30 00:15:38 35.21
20100 2012-10-31 00:15:48 37.07
20100 2012-11-01 00:15:49 38.17
20100 2012-11-02 00:15:19 38.97
20103 2012-10-30 10:27:34 57.98
20103 2012-10-31 12:24:42 60.83

Sortie souhaitée :

La requête doit produire une table avec une colonne Consumption ajoutée :

SN Date Value Consumption
2380 2012-10-30 00:15:51 21.01 0.00
2380 2012-10-31 00:31:03 22.04 1.03
2380 2012-11-01 00:16:02 22.65 0.61
2380 2012-11-02 00:15:32 23.11 0.46
20100 2012-10-30 00:15:38 35.21 0.00
20100 2012-10-31 00:15:48 37.07 1.86
20100 2012-11-01 00:15:49 38.17 1.10
20100 2012-11-02 00:15:19 38.97 0.80
20103 2012-10-30 10:27:34 57.98 0.00
20103 2012-10-31 12:24:42 60.83 2.85

Solution SQL :

La requête SQL suivante utilise des variables définies par l'utilisateur pour obtenir le résultat souhaité :

<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 := 0, @lastValue := 0) AS SQLVars
ORDER BY
    EL.SN,
    EL.Date;</code>
Copier après la connexion

Explication :

  • @lastSN et @lastValue : ce sont des variables définies par l'utilisateur initialisées à 0. @lastSN suit le dernier SN traité et @lastValue stocke la dernière valeur traitée.
  • IF(@lastSN = EL.SN, EL.Value - @lastValue, 0.00) : Cette instruction conditionnelle vérifie si le SN actuel est le même que le SN précédent. Si c'est vrai, il calcule la différence de consommation ; sinon, il fixe la consommation à 0,00 (pour la première entrée de chaque SN).
  • @lastSN := EL.SN, @lastValue := EL.Value : Ces affectations mettent à jour les variables définies par l'utilisateur après le traitement de chaque ligne.
  • ORDER BY EL.SN, EL.Date : Cette clause garantit que les lignes sont traitées dans le bon ordre (par SN puis par date) pour des calculs de différence précis.

Cette approche calcule efficacement la différence de consommation d'énergie pour chaque SN en tirant parti des capacités de gestion des variables de MySQL. L'utilisation de ORDER BY est cruciale pour l'exactitude des résultats.

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