Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tính toán delta (chênh lệch của hàng hiện tại và hàng trước đó) trong sql

Đây là truy vấn ban đầu của bạn đã được sửa đổi cho phù hợp:

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;

So sánh tháng được chuyển từ where thành on , điều này tạo nên sự khác biệt cho left jointt2.amount được thay thế bằng ifnull(tt2.amount, 0) .

UPDATE phiên bản của tập lệnh:

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;

Cú pháp MySQL chính xác cho bản cập nhật ở trên thực sự phải là:

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

(Cảm ơn @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. Broken Pipe Exception trên ứng dụng Grails

  2. MySQL Tham gia nơi không tồn tại

  3. MYSQL định dạng DATETIME không chính xác

  4. Giới hạn sắp xếp thứ tự và bù đắp vị trí không chính xác trong truy vấn

  5. mySQL MATCH trên nhiều bảng