1

Oracle db での SQL クエリに関するヘルプが必要です。event = "Start" のときにグループに分割したいデータがあります。たとえば、行 1 ~ 6 はグループ、行 7 ~ 9 はグループです。event = "Ignore" の行を無視したい。最後に、これらのグループの max(Value)-min(Value) を計算したいと思います。データをグループ化する方法がありません。

これは達成できますか?Event = start でパーティションを使用することは可能ですか。同じデータは次のとおりです。

行イベントの値が必要です結果は値の最大最小値です
1 開始 10          
2A11          
3B12          
4C13          
5日 14          
6 E 15 5
--------------------------------------------
7 スタート 16          
8A18          
9 B 20 4
--------------------------------------------
10 スタート 27          
11A30          
12B33          
13C 34 7
--------------------------------------------
14 無視する 35          
--------------------------------------------
15 無視する 36          
--------------------------------------------
16 スタート 33          
17 あ 34          
18B35          
19C36          
20 日 37          
21E385
--------------------------------------------
4

1 に答える 1

0

はい、SQL でこれを行うことができます。

次のクエリは、最初に行 ID の前の最大の開始点を見つけることによって、行が属するグループを見つけます。このバージョンでは、この計算に相関サブクエリが使用されます。

次に、id でグループ化を行い、計算を行います。

select groupid, max(value) - min(value)
from (select t.*,
             (select max(row) from t t2 where t2.row < t.row and t2.event = start
             ) as groupid
      from t
     ) t
where event <> 'IGNORE'
于 2012-09-19T17:44:22.907 に答える