sql >> データベース >  >> RDS >> Mysql

SQLでデルタ(現在の行と前の行の差)を計算します

    それに応じて変更された元のクエリは次のとおりです。

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



    1. MySql-データ送信が遅いフェーズ

    2. データベースに接続した後、役割を切り替えます

    3. サブクエリは複数の行を返します

    4. PHPPDO-行数