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

Hitung delta (perbedaan baris saat ini dan sebelumnya) di sql

Inilah kueri asli Anda yang dimodifikasi sesuai:

select
  tt1.id,
  tt1.amount,
  tt1.AccountId,
  (tt1.amount-ifnull(tt2.amount, 0)) as delta
from trans tt1
  left outer JOIN trans tt2 on tt1.accountid = tt2.accountid
    and month(tt1.date1)-month(tt2.date1)=1;

Perbandingan bulan dipindahkan dari where ke on , yang membuat perbedaan untuk left join , dan tt2.amount diganti dengan ifnull(tt2.amount, 0) .

UPDATE versi skrip:

update tt1
set delta = (tt1.amount-ifnull(tt2.amount, 0))
from trans tt1
  left outer JOIN trans tt2 on tt1.accountid = tt2.accountid
    and month(tt1.date1)-month(tt2.date1)=1;

Sintaks MySQL yang benar untuk pembaruan di atas seharusnya:

update trans tt1 
             left outer JOIN trans tt2 
             on tt1.accountid = tt2.accountid 
             and month(tt1.date1)-month(tt2.date1)=1 
set tt1.delta = (tt1.amount-ifnull(tt2.amount, 0));

(Terima kasih @pinkb .)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara memeriksa apakah data yang diberikan ada di beberapa tabel (semuanya memiliki kolom yang sama)?

  2. Kinerja MySQL - IN Clause vs. Equals (=) untuk Nilai Tunggal

  3. Bagaimana cara menambahkan referensi ke konektor MySQL untuk .NET?

  4. PHP strtotime() berfungsi salah 1 jam?

  5. MySQL:=true vs true pada BOOLEAN. Kapan sebaiknya menggunakan yang mana? Dan mana yang vendor independen?