PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

SQL тригерна функция за АКТУАЛИЗИРАНЕ на дневна подвижна средна стойност при INSERT

Можете да направите UPDATE FROM вашата заявка за избор, като използвате подходящи съединения във вашия тригер.

create or replace function update_sma8() RETURNS TRIGGER AS
$$
 BEGIN

UPDATE daily_ohlc d SET sma8 = s.simple_mov_avg 
FROM
(
 SELECT  sec.cdate,AVG(sec.close)  
   OVER(ORDER BY sec.cdate ROWS BETWEEN 7 PRECEDING AND CURRENT ROW) AS 
    simple_mov_avg FROM daily_ohlc sec
)s where s.cdate = NEW.cdate  --The newly inserted cdate
     AND d.cdate = s.cdate;   
RETURN NULL;

END $$ language plpgsql;

Демо

Единственото предупреждение при използването на този метод е, че ако някой изтрие ред или актуализации close колона, тогава стойностите трябва да бъдат преизчислени, което няма да се случи за съществуващи редове. Само вмъкнатият ред ще види правилната преизчислена стойност.

Вместо това можете просто да създадете View за изчисляване на sma8 колона от главната таблица за всички редове, когато бъде поискано.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL - Функция с локални променливи - Препратката към колона е двусмислена

  2. Как да получа списъци с параметри на функции (за да мога да пусна функция)

  3. PostgreSQL тригер за динамично генериране на кодове за множество таблици

  4. Миграция на Flyway с java

  5. Хибернация на картографиране между PostgreSQL enum и Java enum