Vous pouvez faire une UPDATE FROM
votre requête de sélection en utilisant les jointures appropriées dans votre déclencheur.
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;
La seule mise en garde concernant l'utilisation de cette méthode est que si quelqu'un supprime une ligne ou des mises à jour close
colonne, les valeurs doivent être recalculées, ce qui n'arrivera pas pour les lignes existantes. Seule la ligne insérée verra la bonne valeur recalculée.
Au lieu de cela, vous pouvez simplement créer View
pour calculer le sma8
colonne de la table principale pour toutes les lignes sur demande.