sql >> データベース >  >> RDS >> PostgreSQL

INSERT時に毎日の移動平均を更新するSQLトリガー関数

    UPDATE FROMを実行できます トリガーで適切な結合を使用して選択したクエリ。

    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;
    

    デモ

    この方法を使用する場合の唯一の注意点は、誰かが削除した場合です。 行または更新 close 列の場合、値を再計算する必要があります。これは、既存の行では発生しません。挿入された行のみに、再計算された正しい値が表示されます。

    代わりに、単にViewを作成することができます sma8を計算するには 要求された場合、すべての行のメインテーブルの列。



    1. OpenJPAを使用してデータベースから主キー(ID)が取得されない(?)

    2. 重複を削除するMySQLクエリの変更

    3. グラム、ミリグラム、マイクログラム、キロジュールに最適なmysqlデータ型

    4. Oracleのテーブルからすべての行を選択するためのストアドプロシージャ