sql >> Database teknologi >  >> RDS >> Mysql

Beregn delta (forskel mellem nuværende og forrige række) i sql

Her er din oprindelige forespørgsel ændret i overensstemmelse hermed:

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;

Månedssammenligningen flyttes fra hvor til , hvilket gør en forskel for left join , og tt2.amount er erstattet med ifnull(tt2.amount, 0) .

OPDATERING version af scriptet:

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;

Den korrekte MySQL-syntaks for ovenstående opdatering burde faktisk være:

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

(Tak @pinkb .)



  1. MySQL Math - Er det muligt at beregne en korrelation i en forespørgsel?

  2. Hvordan kan jeg sende en http-anmodning fra postgresql-funktion eller trigger

  3. Understøtter MySQL tabelarv?

  4. Sådan moderniserer du din virksomhed i 2022