差の累計を求める事で可能です。
単なる累計ならWindow関数の**SUM()**を用いる事で、コストは下げられますが、5分分の累計という限定なので、相関副問合せを用います。
SQL
1with t as (
2 SELECT 日時, 値
3 , lag(値) OVER (ORDER BY 日時) AS 1つ前の差
4 , 値 - lag(値) OVER (ORDER BY 日時) AS 差
5 FROM (values
6 ('2019/10/10 11:22:00'::timestamp, 4980)
7 ,('2019/10/10 11:23:00'::timestamp, 5000)
8 ,('2019/10/10 11:24:00'::timestamp, 5200)
9 ,('2019/10/10 11:25:00'::timestamp, 4980)
10 ,('2019/10/10 11:26:00'::timestamp, 5000)
11 ,('2019/10/10 11:27:00'::timestamp, 5200)
12 ,('2019/10/10 11:28:00'::timestamp, 5100)
13 ) AS t1(日時, 値)
14)
15select *
16 , case when lag(値, 5) OVER (ORDER BY 日時) is not null
17 then (select sum(差)/5 from t where 日時 between (t1.日時 - interval '4 minutes') and t1.日時)
18 end AS 5回分平均
19from t as t1
※回答したSQLは5件分=5分分として相違が無いものとしています。
相違があるなら内容は変わります。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/10 15:55 編集
2019/10/10 14:27