sql >> Databáze >  >> RDS >> Mysql

MySQL zobrazuje součet rozdílu dvou hodnot

Chcete sečíst rozdíly mezi po sobě jdoucími řádky.
Řekněme například, že tyto hodnoty máte pro sloupec kwh :

kwh
---
10
12
14
17
25
32

takže rozdíly jsou:

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

Součet těchto rozdílů je roven 32-10 což je:

Takže to, co potřebujete, je okenní funkce FIRST_VALUE() k získání těchto hodnot:

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

a není potřeba žádný poddotaz ani agregace.

Ve svém kódu jsem ponechal PARTITION BY n.customer_id protože jej používáte ve svém kódu, ačkoli možná budete potřebovat PARTITION BY n.customer_id, m.msn .



  1. Naučte se, jak vytvářet formuláře v paměti (Ano, slyšeli jste to správně)

  2. Jak vybudovat flaskovou aplikaci na již existující databázi?

  3. Jak vytvořit pohled na SQL Server

  4. Codeigniter, mysql, select_max a přidejte 1 před vložením dalšího záznamu