Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Berechnen Sie Delta (Differenz der aktuellen und vorherigen Zeile) in SQL

Hier ist Ihre ursprüngliche Abfrage entsprechend modifiziert:

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;

Der Monatsvergleich wird von where verschoben auf on , was für left join einen Unterschied macht , und tt2.amount wird durch ifnull(tt2.amount, 0) ersetzt .

Das UPDATE Version des Skripts:

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;

Die korrekte MySQL-Syntax für das obige Update sollte eigentlich lauten:

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

(Danke @pinkb .)