sql >> Databasteknik >  >> RDS >> PostgreSQL

SQL-triggerfunktion för att UPPDATERA dagligt glidande medelvärde vid INSERT

Du kan göra en UPDATE FROM din valfråga med lämpliga joins i din utlösare.

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

Den enda varningen med att använda den här metoden är att om någon tar bort en rad eller uppdateringar close kolumnen måste värdena beräknas om, vilket inte kommer att hända för befintliga rader. Endast den infogade raden kommer att se det rätta omräknade värdet.

Istället kan du helt enkelt skapa View för att beräkna sma8 kolumn från huvudtabellen för alla rader när så begärs.



  1. Det gick inte att skapa drivrutinen från NHibernate.Driver.NpgsqlDriver

  2. MYSQL-fråga WHERE IN vs OR

  3. Hur man massändrar MySQL Triggers DEFINER

  4. Android ListView:hur undviker man databasfråga i bindView()? Behöver hämta en till många relationsdata