またも質問させていただきます!
以下のようなテーブルがあり、以下3条件で抽出したいのですがうまくいきません。
①2017/5/1以降に購入したユーザー数
②2017/5/1以降初めて購入ユーザー数
③2017/5/1以降に、1年&6ヶ月以上購入がなかった復帰ユーザー数
■テーブル名:purchase
date uid
2017/4/30 1111
2017/5/1 1111
2017/5/2 1111
2016/4/1 2222
2017/5/1 2222
2016/11/1 3333
2017/5/1 3333
2017/5/1 4444
2017/5/1 5555
2017/5/2 5555
2017/5/3 5555
①と②は以下で出るかと思ったのですが、ttlとfstの値が同じになってしまいます、、
SQL
1select 2 count(distinct case when date >= '2017-05-01' then uid else null end) as ttl 3 ,count(distinct case when first_order >= '2017-05-01' then uid else null end) as fst 4 ,count(distinct case when first_order < '2017-05-01' then uid else null end) as rep 5FROM( 6select 7 uid 8 ,date 9 ,MIN(date) as first_order 10 from purchase 11 GROUP BY 1,2 12) z 13
また、③は以下にすると5/1以降に初めて購入したユーザーが含まれてしまうので
うまくいきません。。
SQL
1select 2 count(distinct case when last_odr - first_odr > 365 then a.uid else null end) as r_y 3 ,count(distinct case when last_odr - first_odr > 180 and last_odr - first_odr <= 365 then a.uid else null end) as r_m 4FROM( 5select 6 uid 7 ,MIN(date) as last_odr 8 from purchase 9 where date >= '2017-05-01' 10 GROUP BY 1 11) as a 12left join(select 13 uid 14 ,MIN(date) as first_odr 15 from purchase 16 where date < '2017-05-01' 17 GROUP BY 1 ) as b on a.uid = b.uid
恐れいりますが、ご教示
③2017/5/1以降に、1年&6ヶ月以上購入がなかった復帰ユーザー数の定義がいまいちわかりません。1年6ヶ月という期間はどこを起点にどこまでですか?2017年5月1日より前の最後の買い物から、5月1日以降最初の買い物の期間という認識で合っていますか?
大変ん失礼しました、、、2017/5/1以降に注文があったユーザーの中で1年たっての復帰した人と、6ヶ月たっての復帰をそれぞれ出したく、
つまり、5月1日以降の最初の買い物から遡って、前回の買い物から1年以上の人、6ヶ月以上の人の数、ということですね?これは6ヶ月以上には1年以上の人が含まれますか?
あ、よく見たら下のSQLでは含めないようにしていますね
これはワンクエリでttlとfstとrepが取れないとだめな要件ですか?
■1年復帰 ・・・ 2017/5/1以降に購入した人のうち、1年以上買い物履歴がなかった方
■6ヶ月復帰・・・ 2017/5/1以降に購入した人のうち、6ヶ月以上買い物履歴がなかった方
という意味でした。。失礼しました。
いえ、ぜんぜんワンクエリではなくても大丈夫です、数字さえ出れば!
確認ですが、1年は365日、6ヶ月は180日の固定値でよいのでしょうか?例えばうるう年や大の月は計算に入れないでよいのでしょうか?
あ、そこはもうだいたいでいいので1年365日、6ヶ月は180日固定で大丈夫です!
回答1件
あなたの回答
tips
プレビュー