sql >> Database >  >> RDS >> PostgreSQL

SQL-triggerfunctie om dagelijks voortschrijdend gemiddelde BIJWERKEN bij INSERT

U kunt een UPDATE FROM . doen uw geselecteerde zoekopdracht met behulp van de juiste joins in uw trigger.

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

Het enige voorbehoud bij het gebruik van deze methode is dat als iemand verwijdert een rij of updates close kolom, dan moeten de waarden opnieuw worden berekend, wat niet gebeurt voor bestaande rijen. Alleen de ingevoegde rij zal de juiste herberekende waarde zien.

In plaats daarvan kunt u eenvoudig View . maken om de sma8 . te berekenen kolom uit de hoofdtabel voor alle rijen op verzoek.



  1. Hoe maak je een geneste tabel als database-object in Oracle?

  2. Wat is SQL Server? (Definitie, versies, edities)

  3. PL/SQL-basisconversie zonder functies

  4. GEBRUIK en AAN mixen in Oracle ANSI join