Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
購入DBを読み込んだときに、
新規会員の購入なのか、リピータ会員の購入なのか、判断したいと考えています。
日付, 会員ID , 商品ID
2019/7/8 10:02, 100, A
2019/7/8 18:23, 101, B
2019/7/8 23:50, 102, B
2019/7/9 12:30, 100, B
2019/7/9 16:20, 103, A
購入会員はユニークで3名
新規が3名、リピータが1名
となります。
取得したデータのうち、一番若い日付を新規として扱い、
それ以外の日付はリピータとして扱いたいと思っています。
ロードスクリプト内で処理する方法はありますでしょうか?
このようなデータだったら良いのですが。。
日付, 会員ID , 商品ID, 新規・リピータ
2019/7/8 10:02, 100, A, 新規
2019/7/8 18:23, 101, B, 新規
2019/7/8 23:50, 102, B, 新規
2019/7/9 12:30, 100, B, リピータ
2019/7/9 16:20, 103, A, 新規
下記スクリプトで対応可能です。
Temp:
Load * Inline [
日付, 会員ID , 商品ID
2019/7/8 10:02, 100, A
2019/7/8 18:23, 101, B
2019/7/8 23:50, 102, B
2019/7/9 12:30, 100, B
2019/7/9 16:20, 103, A];
Data:
Load
日付,
会員ID ,
商品ID,
if(会員ID=Peek(会員ID),'リピート','新規') as リピート
Resident Temp
order by 会員ID,日付;
Drop table Temp;
リピート時に複数の商品を購入した場合の動作が上手くいかないので修正しました。
こちらでFIXになります。
Data:
Load
日付,
会員ID ,
商品ID,
if(会員ID=Peek(会員ID) and (日付 <> Peek(日付) or Peek(リピート)='リピート'),'リピート','新規') as リピート
Resident Temp
order by 会員ID,日付;
下記スクリプトで対応可能です。
Temp:
Load * Inline [
日付, 会員ID , 商品ID
2019/7/8 10:02, 100, A
2019/7/8 18:23, 101, B
2019/7/8 23:50, 102, B
2019/7/9 12:30, 100, B
2019/7/9 16:20, 103, A];
Data:
Load
日付,
会員ID ,
商品ID,
if(会員ID=Peek(会員ID),'リピート','新規') as リピート
Resident Temp
order by 会員ID,日付;
Drop table Temp;
応用編になってしまいますが、
以下のように7/9 16:20にユーザー103が、商品AとBを同時購入していたとします(ショッピングカードなどを想定)
日付, 会員ID , 商品ID
2019/7/8 10:02, 100, A
2019/7/8 18:23, 101, B
2019/7/8 23:50, 102, B
2019/7/9 12:30, 100, B
2019/7/9 16:20, 103, A
2019/7/9 16:20, 103, B
2019/7/10 12:00, 103,C
上記の方法だと、このような結果になります。(同一日時に103に購入されたBがリピート扱い)
日付, 会員ID , 商品ID , リピート
2019/7/8 10:02, 100, A, 新規
2019/7/8 18:23, 101, B, 新規
2019/7/8 23:50, 102, B, 新規
2019/7/9 12:30, 100, B, リピート
2019/7/9 16:20, 103, A, 新規
2019/7/9 16:20, 103, B, リピート
2019/7/10 12:00, 103,C, リピート
同一日時は同じ扱いにすることは可能でしょうか?
Group by など試行錯誤してみたのですが、うまく行きませんでした。
日付, 会員ID , 商品ID , リピート
2019/7/8 10:02, 100, A, 新規
2019/7/8 18:23, 101, B, 新規
2019/7/8 23:50, 102, B, 新規
2019/7/9 12:30, 100, B, リピート
2019/7/9 16:20, 103, A, 新規
2019/7/9 16:20, 103, B, 新規 ※同一日時のため、新規として扱いたい。
2019/7/10 12:00, 103,C, リピート
こちらで対応可能です。
判断部分のみの記述にしました。
会員IDが同じで日付が違う場合にリピートとしています。
Data:
Load
日付,
会員ID ,
商品ID,
if(会員ID=Peek(会員ID) and 日付 <> Peek(日付),'リピート','新規') as リピート
Resident Temp
order by 会員ID,日付;
リピート時に複数の商品を購入した場合の動作が上手くいかないので修正しました。
こちらでFIXになります。
Data:
Load
日付,
会員ID ,
商品ID,
if(会員ID=Peek(会員ID) and (日付 <> Peek(日付) or Peek(リピート)='リピート'),'リピート','新規') as リピート
Resident Temp
order by 会員ID,日付;