Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL affiche la somme de la différence de deux valeurs

Vous voulez additionner les différences entre des lignes consécutives.
Dites, par exemple, que vous avez ces valeurs pour la colonne kwh :

kwh
---
10
12
14
17
25
32

donc les différences sont :

kwh_diff
--------
0
12-10
14-12
17-14
25-17
32-25

La somme de ces différences est égale à 32-10 qui est :

Donc, ce dont vous avez besoin est la fonction de fenêtre FIRST_VALUE() pour obtenir ces valeurs :

SELECT DISTINCT n.`name`, n.`customer_id`, m.`msn`, 
   FIRST_VALUE(m.kwh) OVER (PARTITION BY n.`customer_id` ORDER BY m.`data_date_time` DESC) -
   FIRST_VALUE(m.kwh) OVER (PARTITION BY n.`customer_id` ORDER BY m.`data_date_time` ASC) AS kwh_diff
FROM mdc_node n
INNER JOIN `mdc_meters_data` m ON n.`customer_id` = m.`cust_id`
WHERE n.`lft` = 5 AND n.`icon` NOT IN ('folder')
AND m.`data_date_time` BETWEEN NOW() - INTERVAL 30 DAY AND NOW()

et aucune sous-requête ou agrégation n'est nécessaire.

J'ai gardé dans mon code PARTITION BY n.customer_id parce que vous l'utilisez dans votre code, bien que vous ayez peut-être besoin de PARTITION BY n.customer_id, m.msn .