我的表
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
可能会帮助我找到这些组合。但我不知道该怎么做。
答案 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
;