Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Calcular delta (diferença da linha atual e anterior) no sql


Aqui está sua consulta original modificada de acordo:
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;

A comparação do mês é movida de where para on , o que faz a diferença para left join e tt2.amount é substituído por ifnull(tt2.amount, 0) .

A UPDATE versão do script:
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;



A sintaxe correta do MySQL para a atualização acima deve ser:
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));

(Obrigado @pinkb .)