それに応じて変更された元のクエリは次のとおりです。
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;
月の比較はwhere
から移動されます on
、これはleft join
に違いをもたらします 、およびtt2.amount
ifnull(tt2.amount, 0)
に置き換えられます 。
UPDATE
スクリプトのバージョン:
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;
上記の更新の正しいMySQL構文は、実際には次のようになります。
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));
(ありがとう @pinkb 。)