【问题标题】:SQL Query- Partition into groups & calculate max- min valueSQL 查询 - 分组并计算最大值 - 最小值
【发布时间】:2012-09-19 17:40:04
【问题描述】:

在 Oracle 数据库中的 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 --------------------------------------------------------

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    是的,您可以在 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'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多