2017-02-13 13 views
3

私のテーブルがある場合は、テーブルに開いている行の数に等しい行数を挿入それらの15以上の

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

これらの行

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

はお互いを打ち消すであろう。これらは

1  3  -1 
1  6  -1 

となります。最後に開いた行数が15以上であれば、各オープン行の私は和がオープン行及びタイプの-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
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 
;   
関連する問題