Bạn có thể thực hiện UPDATE FROM
truy vấn lựa chọn của bạn bằng cách sử dụng các phép nối thích hợp trong Trình kích hoạt của bạn.
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;
Cảnh báo duy nhất khi sử dụng phương pháp này là nếu ai đó xóa một hàng hoặc cập nhật close
thì các giá trị phải được tính toán lại, điều này sẽ không xảy ra đối với các hàng hiện có. Chỉ hàng được chèn mới thấy giá trị được tính lại phù hợp.
Thay vào đó, bạn có thể chỉ cần tạo View
để tính toán sma8
từ bảng chính cho tất cả các hàng khi được yêu cầu.