回答編集履歴
7
同じrpmに対応するよう変更
test
CHANGED
@@ -26,7 +26,7 @@
|
|
26
26
|
|
27
27
|
rpmの最大をピークとして、ピークまでとピーク以降に分割、rpmはピッチ毎に分割し、
|
28
28
|
|
29
|
-
そのデータ内の最大のrpmのデータに間引く。(※前提として連続して同じrpmは無し)
|
29
|
+
そのデータ内の最大のrpmのデータに間引く。(~~※前提として連続して同じrpmは無し~~)
|
30
30
|
|
31
31
|
試してはいませんが、上記仕様で組み立てたSQLです。
|
32
32
|
|
@@ -34,7 +34,7 @@
|
|
34
34
|
|
35
35
|
with base as (
|
36
36
|
|
37
|
-
select *, (select time from tbl where rpm =(select max(rpm) from tbl)) as peak_time
|
37
|
+
select *, (select max(time) from tbl where rpm =(select max(rpm) from tbl)) as peak_time
|
38
38
|
|
39
39
|
from tbl
|
40
40
|
|
@@ -42,7 +42,7 @@
|
|
42
42
|
|
43
43
|
, blocking as (
|
44
44
|
|
45
|
-
select *, case when time<=peak_time then 0 else 1 end as peak_block, (rpm / 400) as rpm_block
|
45
|
+
select *, case when time<=peak_time then 0 else 1 end as peak_block, FLOOR(rpm / 400) as rpm_block
|
46
46
|
|
47
47
|
from base
|
48
48
|
|
@@ -52,9 +52,11 @@
|
|
52
52
|
|
53
53
|
from blocking src
|
54
54
|
|
55
|
-
where
|
55
|
+
where time = (
|
56
56
|
|
57
|
+
select max(time) from tbl
|
58
|
+
|
57
|
-
select max(rpm) from blocking where peak_block=src.peak_block and rpm_block=src.rpm_block
|
59
|
+
where rpm=(select max(rpm) from blocking where peak_block=src.peak_block and rpm_block=src.rpm_block)
|
58
60
|
|
59
61
|
)
|
60
62
|
|
@@ -72,9 +74,9 @@
|
|
72
74
|
|
73
75
|
select *
|
74
76
|
|
75
|
-
, case when rpm - lag(rpm, 1, 0) over(order by time) > 0 then 0 else 1 end as peak_block
|
77
|
+
, case when rpm - lag(rpm, 1, 0) over(order by time) >= 0 then 0 else 1 end as peak_block
|
76
78
|
|
77
|
-
, (rpm / 400) as rpm_block
|
79
|
+
, FLOOR(rpm / 400) as rpm_block
|
78
80
|
|
79
81
|
from tbl
|
80
82
|
|
@@ -84,9 +86,11 @@
|
|
84
86
|
|
85
87
|
from blocking src
|
86
88
|
|
87
|
-
where
|
89
|
+
where time = (
|
88
90
|
|
91
|
+
select max(time) from tbl
|
92
|
+
|
89
|
-
select max(rpm) from blocking where peak_block=src.peak_block and rpm_block=src.rpm_block
|
93
|
+
where rpm=(select max(rpm) from blocking where peak_block=src.peak_block and rpm_block=src.rpm_block)
|
90
94
|
|
91
95
|
)
|
92
96
|
|
6
修正
test
CHANGED
@@ -72,7 +72,7 @@
|
|
72
72
|
|
73
73
|
select *
|
74
74
|
|
75
|
-
, case when rpm - lag(rpm) over(order by time) > 0 then 0 else 1 end as peak_block
|
75
|
+
, case when rpm - lag(rpm, 1, 0) over(order by time) > 0 then 0 else 1 end as peak_block
|
76
76
|
|
77
77
|
, (rpm / 400) as rpm_block
|
78
78
|
|
5
追記
test
CHANGED
@@ -59,3 +59,35 @@
|
|
59
59
|
)
|
60
60
|
|
61
61
|
```
|
62
|
+
|
63
|
+
追記2
|
64
|
+
|
65
|
+
--
|
66
|
+
|
67
|
+
[lag](https://docs.microsoft.com/ja-jp/sql/t-sql/functions/lag-transact-sql?view=sql-server-2017)を使用した別パターン
|
68
|
+
|
69
|
+
```SQL
|
70
|
+
|
71
|
+
with blocking as (
|
72
|
+
|
73
|
+
select *
|
74
|
+
|
75
|
+
, case when rpm - lag(rpm) over(order by time) > 0 then 0 else 1 end as peak_block
|
76
|
+
|
77
|
+
, (rpm / 400) as rpm_block
|
78
|
+
|
79
|
+
from tbl
|
80
|
+
|
81
|
+
)
|
82
|
+
|
83
|
+
select *
|
84
|
+
|
85
|
+
from blocking src
|
86
|
+
|
87
|
+
where rpm = (
|
88
|
+
|
89
|
+
select max(rpm) from blocking where peak_block=src.peak_block and rpm_block=src.rpm_block
|
90
|
+
|
91
|
+
)
|
92
|
+
|
93
|
+
```
|
4
追記
test
CHANGED
@@ -26,7 +26,7 @@
|
|
26
26
|
|
27
27
|
rpmの最大をピークとして、ピークまでとピーク以降に分割、rpmはピッチ毎に分割し、
|
28
28
|
|
29
|
-
そのデータ内の最大のrpmのデータに間引く。
|
29
|
+
そのデータ内の最大のrpmのデータに間引く。(※前提として連続して同じrpmは無し)
|
30
30
|
|
31
31
|
試してはいませんが、上記仕様で組み立てたSQLです。
|
32
32
|
|
3
修正
test
CHANGED
@@ -54,7 +54,7 @@
|
|
54
54
|
|
55
55
|
where rpm = (
|
56
56
|
|
57
|
-
select max(rpm) from blocking where peak_block=src.peak_block and
|
57
|
+
select max(rpm) from blocking where peak_block=src.peak_block and rpm_block=src.rpm_block
|
58
58
|
|
59
59
|
)
|
60
60
|
|
2
SQL修正
test
CHANGED
@@ -42,7 +42,7 @@
|
|
42
42
|
|
43
43
|
, blocking as (
|
44
44
|
|
45
|
-
select *,
|
45
|
+
select *, case when time<=peak_time then 0 else 1 end as peak_block, (rpm / 400) as rpm_block
|
46
46
|
|
47
47
|
from base
|
48
48
|
|
@@ -54,7 +54,7 @@
|
|
54
54
|
|
55
55
|
where rpm = (
|
56
56
|
|
57
|
-
select max(rpm) from blocking where peak_block=src.peak_block
|
57
|
+
select max(rpm) from blocking where peak_block=src.peak_block and rpm_block=src.rpm_block
|
58
58
|
|
59
59
|
)
|
60
60
|
|
1
追記
test
CHANGED
@@ -17,3 +17,45 @@
|
|
17
17
|
こういった関数を使用せず、それでも一括で行うなら、テンポラリーテーブルを特定のピッチ刻みで作成する事になるかと思います。
|
18
18
|
|
19
19
|
※ユニオンクエリーを行数分動的に作成するという、スマートではない方法も考えられますが。
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
追記
|
24
|
+
|
25
|
+
--
|
26
|
+
|
27
|
+
rpmの最大をピークとして、ピークまでとピーク以降に分割、rpmはピッチ毎に分割し、
|
28
|
+
|
29
|
+
そのデータ内の最大のrpmのデータに間引く。
|
30
|
+
|
31
|
+
試してはいませんが、上記仕様で組み立てたSQLです。
|
32
|
+
|
33
|
+
```SQL
|
34
|
+
|
35
|
+
with base as (
|
36
|
+
|
37
|
+
select *, (select time from tbl where rpm =(select max(rpm) from tbl)) as peak_time
|
38
|
+
|
39
|
+
from tbl
|
40
|
+
|
41
|
+
)
|
42
|
+
|
43
|
+
, blocking as (
|
44
|
+
|
45
|
+
select *, (time<=peak_time) as peak_block, (rpm / 400) as rpm_block
|
46
|
+
|
47
|
+
from base
|
48
|
+
|
49
|
+
)
|
50
|
+
|
51
|
+
select *
|
52
|
+
|
53
|
+
from blocking src
|
54
|
+
|
55
|
+
where rpm = (
|
56
|
+
|
57
|
+
select max(rpm) from blocking where peak_block=src.peak_block, rpm_block=src.rpm_block
|
58
|
+
|
59
|
+
)
|
60
|
+
|
61
|
+
```
|