在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 --------------------------------------------
答案 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'