回答編集履歴

3

追記

2019/10/10 05:21

投稿

sazi
sazi

スコア25327

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

修正

2019/10/10 05:21

投稿

sazi
sazi

スコア25327

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(差) OVER (ORDER BY 日時) / 5
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

訂正

2019/10/10 04:38

投稿

sazi
sazi

スコア25327

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