Soustraction en mysql php

Fermé
Nicolas_3411 Messages postés 6 Date d'inscription vendredi 2 septembre 2022 Statut Membre Dernière intervention 5 septembre 2022 - 3 sept. 2022 à 13:13
yg_be Messages postés 22734 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 avril 2024 - 5 sept. 2022 à 14:11

Bonjour,

J'ai reussi a faire une condition if dans la requete afin des soustraire la valeur de l'index precedente mais il me reste juste un soucis est ce que vous savez comment pour la premiere valeur de soustraire la valeur n-1 de la date que j'ai pas selectionné 

 par exemple je veux les releves d'hier du coup je met la date d'hier mais la premiere valeur ne fait pas la soustraction de la valeur d'avant hier que j'ai pas select la date

 je suis en train de creer un projet auquel dedans il y a une partie de consommation de fluides (eau/elec) et j'utilise le chart.js pour l'affichage de graphs du coup dans la requete je devrai faire le calcul de l'index actuelle - l'ancien index exemple 

oldindex = 343.32 NewIndex = (IndexReleve/ImpParUnit) - oldindex = 471.56 - 343.32 = 128.24 the value of output 128.24 OldIndex = 471.56 NewIndex = (IndexReleve/ImpParUnit) - oldindex = 473 - 471.56 = 1.44 the value of output 1.44 etc

Du coup j'ai reussi a faire cela dans la requete le probleme c'est que la premiere valeur comme elle n'a pas un ancien index pour faire la soustraction du coup elle est enorme et je voulais savoir du coup si c'etait possible de faire la soustraction de l'index precedente alors que ce dernier n'est pas selectionné dans la requete

j'ai pense a faire avec l'offset mais cela revient au probleme original que c'est la premier valeur n'a pas d'ancien index pour faire la soustraction

explication du soucis
SELECT EL.Compteur, EL.Id, DATE_FORMAT(EL.DateHeure, '%d/%m/%Y %H:%i:%s') as DateHeure, EL.IndexReleve, if( 1 > 0, ROUND(EL.IndexReleve/EL.ImpParUnit) - @lastValue, 0000.00 ) as IndexReel, @lastSN := EL.Id,   @lastValue := Round(EL.IndexReleve/EL.ImpParUnit) FROM Emplacements, Releves EL, ( select @lastSN := 0, @lastValue := 0 ) SQLVars  WHERE DateHeure>'".$DebutAnalyse."' AND DateHeure<'".$FinAnalyse."' AND Emplacements.Id=".$Emplacement." AND Emplacements.CompteurElec=EL.Compteur ORDER BY EL.DateHeure

Le code de la requete 

merci beaucoup d'avance
Windows / Chrome 87.0.4280.66

A voir également:

1 réponse

yg_be Messages postés 22734 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 avril 2024 1 477
Modifié le 3 sept. 2022 à 14:17

Moi j'essaierais en créant une view associée au code SQL que tu présentes, dans laquelle tu supprimes les conditions sur DateHeure.

Ensuite, fais une requête sur la view, dans laquelle tu appliques la condition sur DateHeure.

Ou utilise une requête similaire à celle suggérée ici, à laquelle tu ajoutes la condition sur DateHeure.

1
Nicolas_3411 Messages postés 6 Date d'inscription vendredi 2 septembre 2022 Statut Membre Dernière intervention 5 septembre 2022
3 sept. 2022 à 15:05

Je comprends pas vraiment ce que vous voulez dire.... 

0
yg_be Messages postés 22734 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 avril 2024 1 477 > Nicolas_3411 Messages postés 6 Date d'inscription vendredi 2 septembre 2022 Statut Membre Dernière intervention 5 septembre 2022
3 sept. 2022 à 15:13
0
Nicolas_3411 Messages postés 6 Date d'inscription vendredi 2 septembre 2022 Statut Membre Dernière intervention 5 septembre 2022 > yg_be Messages postés 22734 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 avril 2024
4 sept. 2022 à 23:48

Ah ok j'ai compris le fonctionnement merci beaucoup pour le message ça m'a aidé a reflechir a la solution, mais il y a juste un soucis j'ai essayé de faire avec la view comme ça j'avais les calculs fait et a juste recuperer en fonction de la date apres le probleme c'est que dans ma requete j'utilise des variables et du coup ça ne marche pas dans la view il n'accepte pas les variables 

0
yg_be Messages postés 22734 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 avril 2024 1 477 > Nicolas_3411 Messages postés 6 Date d'inscription vendredi 2 septembre 2022 Statut Membre Dernière intervention 5 septembre 2022
5 sept. 2022 à 12:13

C'est ce que je craignais.

Je n'ai pas d'idée de comment arriver à la solution en utilisant ainsi des variables.

Je suggère d'utiliser alors la suggestion sans variable.

0
Nicolas_3411 Messages postés 6 Date d'inscription vendredi 2 septembre 2022 Statut Membre Dernière intervention 5 septembre 2022 > yg_be Messages postés 22734 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 avril 2024
5 sept. 2022 à 12:20

J'ai essaye sans les variables exemple de requete 

SELECT l.sn,
       l.date, 
       l.value,
       l.value - (SELECT value 
                  FROM energylog x
                  WHERE x.date < l.date
                  AND x.sn = l.sn
                  ORDER BY date DESC
                  LIMIT 1) consumption
FROM energylog l;

Le probleme c'est que le output est NULL 

0