PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

SQL-Triggerfunktion zum AKTUALISIEREN des täglichen gleitenden Durchschnitts beim EINFÜGEN

Sie können ein UPDATE FROM durchführen Ihre ausgewählte Abfrage mit entsprechenden Joins in Ihrem Trigger.

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;

Demo

Der einzige Vorbehalt bei der Verwendung dieser Methode besteht darin, dass jemand löscht eine Reihe oder Aktualisierungen close Spalte, dann müssen die Werte neu berechnet werden, was bei bestehenden Zeilen nicht passiert. Nur die eingefügte Zeile wird den richtigen neu berechneten Wert sehen.

Stattdessen können Sie einfach View erstellen um den sma8 zu berechnen Spalte aus der Haupttabelle für alle Zeilen, wenn angefordert.