2012-09-19 102 views
1

需要您對Oracle數據庫中的SQL查詢提供幫助。當事件=「開始」時,我想要將數據分割成組。例如。第1-6行是一個組,第7-9行是一個組。我想忽略event =「Ignore」的行。最後,我想爲這些組計算max(Value)-min(Value)。我沒有任何方法來分組數據。SQL查詢 - 分組進行分組並計算最大值

這可以實現嗎?是否有可能通過Event = start使用分區。相同的數據如下:

 
Row  Event Value Required Result is max-min of value 
1   Start  10   
2   A   11   
3   B   12   
4   C   13   
5   D   14   
6   E   15   5 
-------------------------------------------- 
7   Start  16   
8   A   18   
9   B   20   4 
-------------------------------------------- 
10   Start  27   
11   A   30   
12   B   33   
13   C   34   7 
-------------------------------------------- 
14   Ignore  35   
-------------------------------------------- 
15   Ignore  36   
-------------------------------------------- 
16   Start  33   
17   A   34   
18   B   35   
19   C   36   
20   D   37   
21   E   38   5 
--------------------------------------------
+1

您正在使用哪些DBMS? – WojtusJ

回答

0

是的,你可以在SQL中做到這一點。

以下查詢首先通過查找行標識之前的最大開始找到行所在的組。此版本使用相關子查詢進行此計算。

然後它對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'