UPDATE FROM
を実行できます トリガーで適切な結合を使用して選択したクエリ。
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;
この方法を使用する場合の唯一の注意点は、誰かが削除した場合です。 行または更新 close
列の場合、値を再計算する必要があります。これは、既存の行では発生しません。挿入された行のみに、再計算された正しい値が表示されます。
代わりに、単にView
を作成することができます sma8
を計算するには 要求された場合、すべての行のメインテーブルの列。