PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Funkcja wyzwalacza SQL do UPDATE dziennej średniej ruchomej po INSERT

Możesz wykonać UPDATE FROM zapytanie wybierające przy użyciu odpowiednich złączeń w wyzwalaczu.

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

Jedynym zastrzeżeniem korzystania z tej metody jest to, że jeśli ktoś usuwa wiersz lub aktualizacje close kolumny, wartości muszą zostać ponownie obliczone, co nie nastąpi w przypadku istniejących wierszy. Tylko wstawiony wiersz zobaczy właściwą, ponownie obliczoną wartość.

Zamiast tego możesz po prostu utworzyć View aby obliczyć sma8 kolumna z głównej tabeli dla wszystkich wierszy na żądanie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wstawianie/aktualizacja zbiorcza Postgres, która jest bezpieczna dla wstrzyknięć. Może funkcja, która pobiera tablicę?

  2. jeden do jednego wyraźne ograniczenie selekcji

  3. Powiadamianie o zmianach postgres w aplikacji java

  4. Jak w tabeli PostgresQL utworzyć kolumnę ze wszystkimi wartościami w kolumnie 1, dla której wartość bieżącego wiersza w kolumnie 1 pojawia się w kolumnie 2?

  5. PostgreSQL UTWÓRZ TABELĘ