如何解决如何从每个行都是唯一购买的数据库中为客户购买创建时间范围窗口?
我在BigQuery中有一个表格,其中每一行代表一个客户的唯一购买交易。该表包含客户ID,购买的商品,购买的时间以及我们看到该客户的次数。
我想创建一个表,其中包含一行客户首次购买的商品以及他们在购买后31天内购买的所有商品。
我还希望他们第二次购买新的行,并再次购买他们在购买后31天内购买的任何物品。
我正在尝试查看此处是否有任何模式,以帮助推动CRM活动。
如果在python中这样做会更容易,我也可以使用它。
我尝试使用以下方法:
SELECT t1.ID,t1.ITEM as FIRST_PURCHASE,t2.ITEM as SECOND_PURCHASE,t3.ITEM as THIRD_PURCHASE
FROM `TABLE` as t1
left join `TABLE` as t2
on t1.ID = t2.ID and t1.PURCHASE_NUMBER = t2.PURCHASE_NUMBER+1
left join `TABLE` as t3
on t1.ID = t2.ID and t1.PURCHASE_NUMBER = t3.PURCHASE_NUMBER+2
where (t2.DATE_DIFF <= 31) and (t3.DATE_DIFF <= 31)
但是很明显,我第一次购买只获得31天的展示期,而以后的购买都没有31天的展示期。我还以为我也许可以使用Pivot在python中尝试此操作?
解决方法
我认为您可以这样处理:
with purchases as (
-- dummy column names
select customerID,item,date,visits from `project.dataset.table`
),purchase_ordering as (
select *,row_number() over (partition by customerID order by date asc) as rn
from purchases
),first_two_purchases as (
select
* except(rn),case when rn = 1 then 'First Purchase' else 'Second Purchase' end as purchase_order
from purchase_ordering
where rn <= 2
),additional_purchase_logic as (
select
ftp.purchase_order,ftp.customerID,ftp.item,ftp.date,array_agg(struct(p.item,p.date)) as within_31_days_of_purchase
from first_two_purchases ftp
left join purchases p using(customer_id)
where p.date > ftp.date and p.date <= date_add(ftp.date,interval 31 day)
group by 1,2,3,4
)
select * from additional_purchase_logic
请注意,如果您的第二次购买是在首次购买后的31天内,它将在“首次购买”行中显示为后续购买,并在“第二次购买”行中显示为独立记录。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。