2017-03-02 6 views
0

顧客IDとイベントタイプを持つテーブルがあります。私はEVENT1があるたびにカウンタをインクリメントしたいと思いますが、イベントがEVENT2またはEVENT3の場合、カウンタは前の値を継承する必要があります。最終的にこれは私にEVENT1に基づく一意の識別子を与えます。これは開始アクションです。開始イベントからのIDの生成

これはExcelで簡単ですが、私はこれを複製できるSQLを作成するのに苦労しています。

ありがとうございます!

表データ:

Customer ID | Event 
001   | EVENT1 
001   | EVENT1 
001   | EVENT1 
001   | EVENT2 
001   | EVENT3 
001   | EVENT1 
001   | EVENT1 
001   | EVENT2 

所望の出力:

Customer ID | Event | UniqueID 
001   | EVENT1 | 1 
001   | EVENT1 | 2 
001   | EVENT1 | 3 
001   | EVENT2 | 3 
001   | EVENT3 | 3 
001   | EVENT1 | 4 
001   | EVENT1 | 5 
001   | EVENT2 | 5 

答えて

1

あなたの行は注文のいくつかの並べ替えであると仮定されているので、あなたは、SQLテーブルの誤解を持っています。列が明示的に順序を提供しない限り、SQLテーブルはの順序付けされていないを表します。

このような列があるとします(例:idまたは日付/時刻の列)。あなたは分析関数を使ってやりたいことができます。

select t.*, 
     sum(case when event = 'EVENT1' then 1 else 0 end) over 
      (partition by customer_id order by id) as event1Id 
from t; 

はまた、それが明確に一意でないとき「ユニークID」何かを呼び出すための私の抵抗に注意してください。

+0

ありがとうございました。あなたが言うように、テーブルは注文され、私は試しに省いて質問を単純にしていますが、それは明らかに裏目に出ました! – Zfunk

関連する問題