Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL mostra la somma della differenza di due valori

Vuoi sommare le differenze tra righe consecutive.
Supponiamo, ad esempio, di avere questi valori per la colonna kwh :

kwh
---
10
12
14
17
25
32

quindi le differenze sono:

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

La somma di queste differenze è pari a 32-10 ovvero:

Quindi quello che ti serve è la funzione della finestra FIRST_VALUE() per ottenere questi valori:

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()

e non sono necessarie sottoquery o aggregazioni.

Ho mantenuto nel mio codice PARTITION BY n.customer_id perché lo usi nel tuo codice, anche se potresti aver bisogno di PARTITION BY n.customer_id, m.msn .