PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Função de gatilho SQL para ATUALIZAR a média móvel diária em INSERT


Você pode fazer um UPDATE FROM sua consulta de seleção usando junções apropriadas em seu Acionador.
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;

Demonstração

A única ressalva de usar esse método é que, se alguém excluir uma linha ou atualizações close coluna, os valores devem ser recalculados, o que não acontecerá para as linhas existentes. Apenas a linha inserida verá o valor recalculado correto.

Em vez disso, você pode simplesmente criar View para calcular o sma8 coluna da tabela principal para todas as linhas quando solicitado.