Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL показва сумата на разликата от две стойности

Искате да сумирате разликите между последователни редове.
Кажете например, че имате тези стойности за колоната kwh :

kwh
---
10
12
14
17
25
32

така че разликите са:

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

Сумата от тези разлики е равна на 32-10 което е:

Така че това, от което се нуждаете, е функцията на прозореца FIRST_VALUE() за да получите тези стойности:

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

и не е необходима подзаявка или агрегиране.

Запазих в моя код PARTITION BY n.customer_id защото го използвате в кода си, въпреки че може да имате нужда от PARTITION BY n.customer_id, m.msn .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Съхранявайки статистически данни, имам ли нужда от DECIMAL, FLOAT или DOUBLE?

  2. Как да създадете динамична матрица в php?

  3. Преглед на кръстосаната репликация на PostgreSQL и MySQL

  4. Как да създавате и изпълнявате MySQL съхранени функции и процедури

  5. PHP грешка:Извикване на функция-член rowCount() на необект