sql >> Database >  >> RDS >> Mysql

MySQL toont de som van het verschil van twee waarden

U wilt de verschillen tussen opeenvolgende rijen optellen.
Stel bijvoorbeeld dat u deze waarden heeft voor de kolom kwh :

kwh
---
10
12
14
17
25
32

dus de verschillen zijn:

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

De som van deze verschillen is gelijk aan 32-10 dat is:

Dus wat je nodig hebt is de vensterfunctie FIRST_VALUE() om deze waarden te verkrijgen:

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

en er is geen subquery of aggregatie nodig.

Ik hield in mijn code PARTITION BY n.customer_id omdat je het in je code gebruikt, hoewel je misschien PARTITION BY n.customer_id, m.msn nodig hebt .



  1. MySQL algemeen querylogboek inschakelen met JDBC

  2. Android SQLite-jokertekens

  3. MySQL - selecteren in de buurt van een ruimtelijk punt

  4. Voorkom dubbele SQL-vermeldingen