回答編集履歴
3
追記
test
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
差の累計を求める事で可能です。
|
2
2
|
|
3
|
-
単なる累計ならWindow関数の**SUM()**を用いる事で、コストは下げられますが、5分分の累計という限定なので、相関副問合せ
|
3
|
+
単なる累計ならWindow関数の**SUM()**を用いる事で、コストは下げられますが、5分分の累計という限定なので、相関副問合せを用います。
|
4
4
|
|
5
5
|
```SQL
|
6
6
|
|
@@ -43,3 +43,7 @@
|
|
43
43
|
from t as t1
|
44
44
|
|
45
45
|
```
|
46
|
+
|
47
|
+
※回答したSQLは5件分=5分分として相違が無いものとしています。
|
48
|
+
|
49
|
+
相違があるなら内容は変わります。
|
2
修正
test
CHANGED
@@ -1,39 +1,45 @@
|
|
1
|
+
差の累計を求める事で可能です。
|
2
|
+
|
1
|
-
Window関数の**SUM()**を用い
|
3
|
+
単なる累計ならWindow関数の**SUM()**を用いる事で、コストは下げられますが、5分分の累計という限定なので、相関副問合せでの問い合わせを用います。
|
2
4
|
|
3
5
|
```SQL
|
6
|
+
|
7
|
+
with t as (
|
8
|
+
|
9
|
+
SELECT 日時, 値
|
10
|
+
|
11
|
+
, lag(値) OVER (ORDER BY 日時) AS 1つ前の差
|
12
|
+
|
13
|
+
, 値 - lag(値) OVER (ORDER BY 日時) AS 差
|
14
|
+
|
15
|
+
FROM (values
|
16
|
+
|
17
|
+
('2019/10/10 11:22:00'::timestamp, 4980)
|
18
|
+
|
19
|
+
,('2019/10/10 11:23:00'::timestamp, 5000)
|
20
|
+
|
21
|
+
,('2019/10/10 11:24:00'::timestamp, 5200)
|
22
|
+
|
23
|
+
,('2019/10/10 11:25:00'::timestamp, 4980)
|
24
|
+
|
25
|
+
,('2019/10/10 11:26:00'::timestamp, 5000)
|
26
|
+
|
27
|
+
,('2019/10/10 11:27:00'::timestamp, 5200)
|
28
|
+
|
29
|
+
,('2019/10/10 11:28:00'::timestamp, 5100)
|
30
|
+
|
31
|
+
) AS t1(日時, 値)
|
32
|
+
|
33
|
+
)
|
4
34
|
|
5
35
|
select *
|
6
36
|
|
7
37
|
, case when lag(値, 5) OVER (ORDER BY 日時) is not null
|
8
38
|
|
9
|
-
then sum(差)
|
39
|
+
then (select sum(差)/5 from t where 日時 between (t1.日時 - interval '4 minutes') and t1.日時)
|
10
40
|
|
11
41
|
end AS 5回分平均
|
12
42
|
|
13
|
-
from
|
43
|
+
from t as t1
|
14
|
-
|
15
|
-
SELECT *
|
16
|
-
|
17
|
-
, lag(値) OVER (ORDER BY 日時) AS 1つ前の値
|
18
|
-
|
19
|
-
, 値 - lag(値) OVER (ORDER BY 日時) AS 差
|
20
|
-
|
21
|
-
FROM (values
|
22
|
-
|
23
|
-
('2019/10/10 11:22'::timestamp, 4980)
|
24
|
-
|
25
|
-
,('2019/10/10 11:23'::timestamp, 5000)
|
26
|
-
|
27
|
-
,('2019/10/10 11:24'::timestamp, 5200)
|
28
|
-
|
29
|
-
,('2019/10/10 11:25'::timestamp, 4980)
|
30
|
-
|
31
|
-
,('2019/10/10 11:26'::timestamp, 5000)
|
32
|
-
|
33
|
-
,('2019/10/10 11:27'::timestamp, 5200)
|
34
|
-
|
35
|
-
) AS t1(日時, 値)
|
36
|
-
|
37
|
-
) t2
|
38
44
|
|
39
45
|
```
|
1
訂正
test
CHANGED
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
SELECT *
|
16
16
|
|
17
|
-
, lag(値) OVER (ORDER BY 日時) AS 1つ前の
|
17
|
+
, lag(値) OVER (ORDER BY 日時) AS 1つ前の値
|
18
18
|
|
19
19
|
, 値 - lag(値) OVER (ORDER BY 日時) AS 差
|
20
20
|
|