如果有超过15个行,则在表中插入一些等于打开行数的行

时间:2017-02-13 15:09:35

标签: sql hive

我的表

id    sum    type
1     3      -1   
1     6      -1    
1     -6      2   
1     -3      1   
1     3      -1
1     6      -1

这些

1     3      -1 

是开放行。类型始终为-1。总和可以是不同的。

这些

1     -6      2 

是关闭的行。输入!= -1。 sum = -sum for open row

这些行

1     3      -1   
1     6      -1    
1     -6      2   
1     -3      1 

将互相否定。这些

1     3      -1
1     6      -1

将保持。如果最后打开的行数大于15,那么对于每个打开的行,我需要在表中插入一行,其中sum是打开行的-sum,类型是2.

分组

select id
, sum
, sum(
  case 
  when type = -1 then 1
  when type != -1 then -1
  else 0
  end
) as num
from table
group by id, sum

    id    sum    num
    1     3      2
    1     6      2    
    1     -6      2   
    1     -3      1 

可能会帮助我找到这些组合。但我不知道该怎么做。

1 个答案:

答案 0 :(得分:1)

select      t.val_id
           ,t.val_sum  
           ,2           as val_type

from       (select      val_id
                       ,-abs (val_sum)                                   as val_sum   
                       ,sum (case when val_type = -1 then 1 else -1 end) as occurrences

            from        mytable

            group by    val_id
                       ,abs (val_sum)

            having      sum (case when val_type = -1 then 1 else -1 end) > 15
            ) t
            lateral view  explode (split (space (cast (occurrences as int) - 1),' ')) e
 ;