Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL menunjukkan jumlah selisih dua nilai

Anda ingin menjumlahkan perbedaan antara baris yang berurutan.
Misalnya, Anda memiliki nilai ini untuk kolom kwh :

kwh
---
10
12
14
17
25
32

jadi perbedaannya adalah:

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

Jumlah dari perbedaan ini sama dengan 32-10 yaitu:

Jadi yang Anda butuhkan adalah fungsi jendela FIRST_VALUE() untuk mendapatkan nilai berikut:

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

dan tidak diperlukan subkueri atau agregasi.

Saya menyimpan kode saya PARTITION BY n.customer_id karena Anda menggunakannya dalam kode Anda, meskipun Anda mungkin memerlukan 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. Baris dihitung tanpa perbedaan

  2. Permintaan MySQL yang kompleks memberikan hasil yang salah

  3. Apakah mungkin untuk memindahkan catatan dari satu tabel ke tabel lain menggunakan satu pernyataan SQL?

  4. Gabungkan titik panjang/lat dalam kotak pembatas tergantung pada radius di MySQL

  5. Hibernate 4 Annotation - Kesalahan Konfigurasi MySQL:java.sql.SQLException:Tidak dapat menambahkan batasan kunci asing