sql >> Databasteknik >  >> RDS >> Mysql

Beräkna delta (skillnaden mellan nuvarande och föregående rad) i sql

Här är din ursprungliga fråga ändrad i enlighet med detta:

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ånadsjämförelsen flyttas från where till on , vilket gör skillnad för left join och tt2.amount ersätts med ifnull(tt2.amount, 0) .

UPDATE version av skriptet:

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 korrekta MySQL-syntaxen för ovanstående uppdatering borde egentligen vara:

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

(Tack @pinkb .)



  1. Laravel Migration Error:Syntaxfel eller åtkomstöverträdelse:1071 Angiven nyckel var för lång; max nyckellängd är 767 byte

  2. Hur söker jag från serialize-fältet i mysql-databasen?

  3. Hur man aktiverar alla begränsningar för kontroll och främmande nyckel i en databas i SQL Server (T-SQL-exempel)

  4. dela nyckelord för post php mysql