sql >> Database teknologi >  >> RDS >> PostgreSQL

SQL-triggerfunktion til OPDATERING af dagligt glidende gennemsnit ved INSERT

Du kan lave en UPDATE FROM din valgforespørgsel ved hjælp af passende joinforbindelser i din 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

Den eneste advarsel ved at bruge denne metode er, at hvis nogen sletter en række eller opdateringer close kolonne, så skal værdierne genberegnes, hvilket ikke vil ske for eksisterende rækker. Kun den indsatte række vil se den rigtige genberegnet værdi.

I stedet kan du blot oprette View for at beregne sma8 kolonne fra hovedtabellen for alle rækker, når der anmodes om det.



  1. Reference:Hvad er et perfekt kodeeksempel ved hjælp af MySQL-udvidelsen?

  2. Sådan oprettes og udføres procedurer i MySQL workbench

  3. Node JS MySQL-forespørgselsfunktion returnerer ikke resultat

  4. Hvordan definerer man en unik begrænsning på en kolonne af MySQL-tabellen i Ruby on Rails 3?