2016-07-06 7 views
2

は、私は2つのことを見て探しています:値が0になります日付を分離し、その日から別の値を集計バック

  1. アカウントがになると、お客様が私たちに(日付を自分のアカウントのすべてを閉じました0)
  2. 顧客が私たちと持っていたインタラクションの総数は、その時点(アカウントが の数字が1より大きい場合のインタラクションの合計)まで までです。

顧客はその時点まで、私たちまで としていた合計の相互作用(アカウントが1よりも 数大きかったときからの相互作用の合計)。

基本的には、添付の画像のトップテーブルからボトムテーブルに移動しようとしています。私は最初のウィンドウ関数ときちんと解決策が存在することになるようにそれが聞こえた質問を読んで、それを再度読んだ後、私はそれが必要だとは思わない

Customer month Accounts Interactions 
12345  Jan-15 3   5 
12345  Feb-15 3   1 
12345  Mar-15 2   7 
12345  Apr-15 1   3 
12345  May-15 1   9 
12345  Jun-15 1   2 
12345  Jul-15 0   3 
67890  Feb-15 1   4 
67890  Mar-15 1   4 
67890  Apr-15 1   9 
67890  May-15 0   5 


Customer Month close date Interactions  
12345   Jul-15    30 
67890   May-15    23 
+0

「月」のデータ型は? – dnoeth

+0

日付形式です。具体的には、顧客活動の月次要約であるため、月の最終日です。 –

答えて

0

。取得するには

SELECT customer, MAX(month), SUM(interactions) 
FROM  mytable 
GROUP BY customer 
+0

ありがとう!それはそれを行うべきであり、私はmax関数の使用について考えなかったことに驚いています。終了3ヶ月前にインタラクションの合計を変更するとどうなりますか?また、私はこれを初めて知っているので、ウィンドウ関数が面白く聞こえるので、私はGoogleに確信して、それらについてもっと学びます。再度、感謝します! –

0

:彼の最後のアカウントを閉じると、顧客があなたと一緒に持っているだろう最後の相互作用になると仮定すると、あなただけのこの問題は、単純な集約関数で解決できることを意味し、顧客ごとの最後の対話の日付を、必要とします最後の3か月にはOLAP関数が必要です:

SELECT Customer, MAX(months), SUM(Interactions) 
FROM 
( 
    SELECT Customer, month, Interactions 
    FROM  mytable 
    QUALIFY 
    -- only closed accounts 
     MIN(Accounts) OVER (PARTITION BY Customer) = 0 

    -- last three months 
    AND month >= oADD_MONTHS(MAX(month) OVER (PARTITION BY Customer), -3) 
) AS dt 
GROUP BY customer 
関連する問題