SQL查询 - 分组到组&计算最大值

时间:2012-09-19 17:40:04

标签: sql oracle

在Oracle db中需要有关SQL查询的帮助。当事件="开始"时,我有想要分组的数据。例如。第1-6行是一组,第7-9行是一组。我想忽略具有event ="忽略"的行。最后,我想计算这些组的max(Value)-min(Value)。我没有办法对数据进行分组。

这可以实现吗?是否可以通过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 个答案:

答案 0 :(得分: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'