J'ai une table contenant des données de capteur dans Sql Server 2014, avec plusieurs capteurs ayant chacun son propre identifiant de capteur. Je veux calculer et mettre/mettre à jour le champ de consommation en calculant la consommation entre la valeur courante et en soustrayant la valeur précédente basée sur la valeur log pour un seul capteur, par exemple sensorid = 8555.sql server set valeur de consommation basée sur le premier enregistrement plus ancien
Structure de table actuelle pour sensorid 8555:
+----------+-------------------------+---------+-------------+
| SensorId | LogDate | Value | Consumption |
+----------+-------------------------+---------+-------------+
| 8555 | 2016-10-03 13:00:00.000 | 0.00000 | Null |
| 2478 | 2016-11-09 09:00:00.000 | 0.00000 | 0.00000 |
| 2478 | 2016-11-09 10:00:00.000 | 0.00000 | 0.00000 |
| 8555 | 2016-10-03 14:00:00.000 | 1.00000 | Null |
| 8555 | 2016-10-03 15:00:00.000 | 1.00000 | Null |
| 8555 | 2016-10-03 16:00:00.000 | 1.00000 | Null |
| 8555 | 2016-10-03 17:00:00.000 | 2.00000 | Null |
| 8555 | 2016-10-03 18:00:00.000 | 2.00000 | Null |
| 8555 | 2016-10-03 19:00:00.000 | 4.00000 | Null |
+----------+-------------------------+---------+-------------+
le résultat final devrait être le suivant:
+----------+-------------------------+---------+-------------+
| SensorId | LogDate | Value | Consumption |
+----------+-------------------------+---------+-------------+
| 8555 | 2016-10-03 13:00:00.000 | 0.00000 | 0.00000 |
| 2478 | 2016-11-09 09:00:00.000 | 0.00000 | 0.00000 |
| 2478 | 2016-11-09 10:00:00.000 | 0.00000 | 0.00000 |
| 8555 | 2016-10-03 14:00:00.000 | 1.00000 | 1.00000 |
| 8555 | 2016-10-03 15:00:00.000 | 1.00000 | 0.00000 |
| 8555 | 2016-10-03 16:00:00.000 | 1.00000 | 0.00000 |
| 8555 | 2016-10-03 17:00:00.000 | 2.00000 | 1.00000 |
| 8555 | 2016-10-03 18:00:00.000 | 2.00000 | 0.00000 |
| 8555 | 2016-10-03 19:00:00.000 | 4.00000 | 2.00000 |
+----------+-------------------------+---------+-------------+
J'ai écumé google pour trouver une solution, et je ne pouvais trouver une version de la réponse pour Mysql, que je ne sais pas comment convertir au serveur sql. Je sais que la déclaration de mise à jour devrait contenir des LAG et probablement utiliser des CTE, mais je n'ai pas trouvé d'explication facile à comprendre sur la façon d'utiliser ceux-ci sur le web.
Toute aide serait appréciée.
Salut Alfaiz, en utilisant une instruction select je sais comment calculer la consommation, le problème est que je veux mettre à jour la table et écrire les valeurs de consommation de retour dans la table . – lazylorax
@lazylorax Mis à jour La requête le vérifie. –
Salut Alfaiz, j'ai fait une mauvaise représentation des données. J'ai plusieurs sensorids dans la même table, et les runners peuvent être mélangés, par exemple il peut y avoir 50 rangées de sensorid 4588 puis 3 rangées de 8555 et alors disons 32 rangées de sensorid 5948 etc. Quelle serait une requête qui serait mettre à jour les valeurs de consommation pour un seul capteur? J'ai essayé votre question avec un "WHERE SensorId = 8555, mais cela me donne les mauvaises valeurs – lazylorax