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.