sql >> Databáze >  >> RDS >> Mysql

Vypočítejte delta (rozdíl aktuálního a předchozího řádku) v sql

Zde je váš původní dotaz odpovídajícím způsobem upraven:

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;

Porovnání měsíce se přesune z where do on , což je rozdíl pro left join a tt2.amount je nahrazeno ifnull(tt2.amount, 0) .

Položka UPDATE verze skriptu:

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;

Správná syntaxe MySQL pro výše uvedenou aktualizaci by ve skutečnosti měla být:

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

(Děkuji @pinkb .)



  1. Obnovení přístupu ke ztracenému heslu MySQL pro PHPMyAdmin na WAMP

  2. Jak změnit schéma více PostgreSQL tabulek v jedné operaci?

  3. Zpracování přechodných poruch v .net core 2.1 MVC pro databázi MySQL

  4. PDO Vložit pole pomocí klíče jako názvu sloupce