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

MySQL viser summen af ​​forskellen på to værdier

Du vil summere forskellene mellem på hinanden følgende rækker.
Sig for eksempel, at du har disse værdier for kolonnen kwh :

kwh
---
10
12
14
17
25
32

så forskellene er:

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

Summen af ​​disse forskelle er lig med 32-10 hvilket er:

Så hvad du har brug for er vinduesfunktionen FIRST_VALUE() for at opnå disse værdier:

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

og ingen underforespørgsel eller aggregering er nødvendig.

Jeg beholdt min kode PARTITION BY n.customer_id fordi du bruger det i din kode, selvom du muligvis har brug for PARTITION BY n.customer_id, m.msn .



  1. OpenSSL - fejl 18 ved 0 dybdeopslag:selvsigneret certifikat

  2. MySQL CASE for at opdatere flere kolonner

  3. Hvordan kan jeg returnere pivottabeloutput i MySQL?

  4. Hvordan sender jeg værdi til en lagret procedureparameter i OLE DB-kildekomponent?