sql >> Database >  >> RDS >> Mysql

Bereken delta (verschil van huidige en vorige rij) in sql

Hier is uw oorspronkelijke zoekopdracht dienovereenkomstig aangepast:

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;

De maandvergelijking is verplaatst van where naar on , wat een verschil maakt voor left join , en tt2.amount wordt vervangen door ifnull(tt2.amount, 0) .

De UPDATE versie van het 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;

De juiste MySQL-syntaxis voor de bovenstaande update zou eigenlijk moeten zijn:

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

(Bedankt @pinkb .)



  1. Vloeiend nHibernate configureren met MySQL

  2. Postgresql UUID ondersteund door Hibernate?

  3. 2 manieren om een ​​lijst met triggers in een SQL Server-database te retourneren met behulp van T-SQL

  4. SQLiteException geen dergelijke tabel:ItemTable tijdens het compileren:Select_id,.... van ItemTable