您可以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
从主表为所有行计算列。