Anda dapat melakukan UPDATE FROM
kueri pemilihan Anda menggunakan gabungan yang sesuai di Pemicu Anda.
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;
Satu-satunya peringatan dalam menggunakan metode ini adalah jika seseorang menghapus satu baris atau pembaruan close
kolom, maka nilainya harus dihitung ulang, yang tidak akan terjadi untuk baris yang ada. Hanya baris yang disisipkan yang akan melihat nilai yang dihitung ulang dengan benar.
Sebagai gantinya, Anda cukup membuat View
untuk menghitung sma8
kolom dari tabel utama untuk semua baris saat diminta.