Calculate delta(difference of current and previous row) in sql

前端 未结 3 1301
离开以前
离开以前 2020-12-05 16:29

I have a table like : trans is the name of the table for example

Id | Trans_Date          | Account_Id | Amount | Delta
------------------------------------         


        
3条回答
  •  不思量自难忘°
    2020-12-05 16:42

    Here's your original query modified accordingly:

    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;
    

    The month comparison is moved from where to on, which makes a difference for left join, and tt2.amount is replaced with ifnull(tt2.amount, 0).


    The UPDATE version of the 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;
    


    The correct MySQL syntax for the above update should actually be:

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

    (Thanks @pinkb.)

提交回复
热议问题