sql >> Databasteknik >  >> RDS >> Mysql

MySQL visar summan av skillnaden av två värden

Du vill summera skillnaderna mellan på varandra följande rader.
Säg till exempel att du har dessa värden för kolumnen kwh :

kwh
---
10
12
14
17
25
32

så skillnaderna är:

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

Summan av dessa skillnader är lika med 32-10 vilket är:

Så vad du behöver är fönsterfunktionen FIRST_VALUE() för att få dessa värden:

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

och ingen underfråga eller aggregering behövs.

Jag behöll i min kod PARTITION BY n.customer_id eftersom du använder det i din kod, även om du kan behöva PARTITION BY n.customer_id, m.msn .



  1. Hitta avståndet mellan två punkter med hjälp av latitud och longitud i mysql

  2. mysql användarvariabel tilldelning med count(*)

  3. Anslut MATLAB och MySQL med JDBC-drivrutinen

  4. Det går inte att ansluta till mysql-servern med go och docker - slå tcp 127.0.0.1:3306:anslut:anslutning nekad