Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL zeigt die Summe der Differenz zweier Werte

Sie möchten die Differenzen zwischen aufeinanderfolgenden Zeilen summieren.
Nehmen Sie zum Beispiel an, dass Sie diese Werte für die Spalte kwh haben :

kwh
---
10
12
14
17
25
32

die Unterschiede sind also:

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

Die Summe dieser Differenzen ist gleich 32-10 das ist:

Was Sie also brauchen, ist die Fensterfunktion FIRST_VALUE() um diese Werte zu erhalten:

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

und es ist keine Unterabfrage oder Aggregation erforderlich.

Ich habe in meinem Code PARTITION BY n.customer_id beibehalten weil Sie es in Ihrem Code verwenden, obwohl Sie möglicherweise PARTITION BY n.customer_id, m.msn benötigen .