1

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

这可以实现吗?是否可以通过 Event = start 使用分区。相同的数据如下:

行事件值要求结果是值的最大值-最小值
1 开始 10          
2个11          
3乙12          
4 C 13          
5 天 14          
6 E 15 5
------------------------------------------
7 开始 16          
8个18          
9 乙 20 4
------------------------------------------
10 开始 27          
11 一个 30          
12乙33          
13 C 34 7
------------------------------------------
14 忽略 35          
------------------------------------------
15 忽略 36          
------------------------------------------
16 开始 33          
17一34          
18 乙 35          
19 C 36          
20 天 37          
21 东 38 5
------------------------------------------
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 回答