Nom | Date | heures | Comptage |
---|---|---|---|
Moulins | 2022-07-17 | 23 | 12 |
Moulins | 2022-07-18 | 00 | 15 |
Moulins | 2022-07-18 | 01 | 20 |
Moulins | 2022-07-18 | 02 | 22 |
Moulins | 2022-07-18 | 03 | 25 |
Moulins | 2022-07-18 | 04 | 20 |
Moulins | 2022-07-18 | 05 | 22 |
Moulins | 2022-07-18 | 06 | 25 |
Mike | 2022-07-18 | 00 | 15 |
Mike | 2022-07-18 | 01 | 20 |
Mike | 2022-07-18 | 02 | 22 |
Mike | 2022-07-18 | 03 | 25 |
Mike | 2022-07-18 | 04 | 20 |
Ma table de saisie actuelle stocke les informations de comptage enregistrées en continu à chaque heure de la journée. Je dois extraire la différence des valeurs de comptage consécutives, mais comme je suis obligé d'utiliser MySQL 5.7, j'ai du mal à le faire.
La requête que j'ai écrite est la suivante :
SET @cnt := 0; SELECT Name, Date, Hours, Count, (@cnt := @cnt - Count) AS DiffCount FROM Hourly ORDER BY Date;
Cela ne donne pas de résultats précis.
J'aimerais obtenir le résultat suivant :
Nom | Date | heures | Comptage | Différence |
---|---|---|---|---|
Moulins | 2022-07-17 | 23 | 12 | 0 |
Moulins | 2022-07-18 | 00 | 15 | 3 |
Moulins | 2022-07-18 | 01 | 20 | 5 |
Moulins | 2022-07-18 | 02 | 22 | 2 |
Moulins | 2022-07-18 | 03 | 25 | 3 |
Moulins | 2022-07-18 | 04 | 20 | 5 |
Moulins | 2022-07-18 | 05 | 22 | 2 |
Moulins | 2022-07-18 | 06 | 25 | 3 |
Mike | 2022-07-18 | 00 | 15 | 0 |
Mike | 2022-07-18 | 01 | 20 | 5 |
Mike | 2022-07-18 | 02 | 22 | 2 |
Mike | 2022-07-18 | 03 | 25 | 3 |
Mike | 2022-07-18 | 04 | 20 | 5 |
Mike | 2022-07-18 | 05 | 22 | 2 |
Mike | 2022-07-18 | 06 | 25 | 3 |
Veuillez suggérer ce qui me manque.
Essayez ce qui suit :
Découvrez la démo de db-fiddle.
Dans MySQL 5.7, vous pouvez mettre à jour une variable en ligne pour contenir la valeur "Count" mise à jour. Puisque vous devez réinitialiser la variable lorsque la valeur de "Nom" change, vous pouvez utiliser une autre variable contenant la valeur précédente de "Nom". Utilisez ensuite la fonction
IF
pour vérifier :Cela fonctionnera avec la fonction
ABS
a>, appliquant la valeur absolue à la différence.Voir la démo ici.
Dans MySQL 8.0, vous pouvez utiliser quelque chose comme
LAG
pour obtenir une sortie fluide. Cela fonctionnera avec :ABS
Appliquer la valeur de différence absolue,COALESCE
est utilisé pour supprimer la première valeur nulle.Voir la démo ici.