PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Fungsi pemicu SQL untuk MEMPERBARUI rata-rata pergerakan harian saat INSERT

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;

Demo

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Faktor pengisian untuk indeks sekuensial yaitu PK

  2. Cegah Injeksi SQL dalam nama kolom Dinamis

  3. Bekerja dengan tanggal di PostgreSQL

  4. Mengapa pernyataan ActiveRecord ini gagal di Server tetapi tidak di Konsol

  5. Haruskah saya menggunakan hstore dalam model data yang diperbarui?