Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Oblicz deltę (różnicę bieżącego i poprzedniego wiersza) w sql

Oto Twoje oryginalne zapytanie odpowiednio zmodyfikowane:

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;

Porównanie miesięcy zostało przeniesione z where do on , co ma znaczenie dla left join i tt2.amount jest zastępowane przez ifnull(tt2.amount, 0) .

UPDATE wersja skryptu:

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;

Prawidłowa składnia MySQL dla powyższej aktualizacji powinna wyglądać następująco:

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

(Dzięki @pinkb .)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Utwórz ramkę danych Spark z zapytania SQL

  2. Procedury składowane a wyzwalacze w MySQL

  3. mysqldump z zapytania

  4. mysql zastępuje znaki akcentowane

  5. Błąd MySQL:maksymalny rozmiar kolumny to 767 bajtów