Mysql
 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да създадете нова MySQL база данни с go-sql-driver

  2. Какво казва стандартът на SQL за скобите в операторите на SQL UNION/EXCEPT/INTERSECT?

  3. ГРЕШКА 1045 (28000):Достъпът е отказан за потребител 'root'@'localhost' (използвайки парола:ДА)

  4. Направете хибернация да цитирате всички имена на таблици/колони

  5. Има ли ограничения за дължината на низа в mysql?