sql >> Base de Datos >  >> RDS >> PostgreSQL

Función de activación de SQL para ACTUALIZAR el promedio móvil diario al INSERTAR

Puedes hacer una UPDATE FROM su consulta de selección usando las uniones apropiadas en su Desencadenador.

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;

Demostración

La única advertencia de usar este método es que si alguien borra una fila o actualizaciones close columna, entonces los valores deben volver a calcularse, lo que no sucederá con las filas existentes. Solo la fila insertada verá el valor recalculado correcto.

En su lugar, puede simplemente crear View para calcular el sma8 columna de la tabla principal para todas las filas cuando se solicite.