获得客户一年内的首次购买
Posted
技术标签:
【中文标题】获得客户一年内的首次购买【英文标题】:Obtain a customer's first purchase for one year 【发布时间】:2020-11-23 16:08:35 【问题描述】:我希望每月获得尽可能多的新客户。我知道我可以获得最低购买量,但我遇到的问题是,如果客户已经购买,但停止购买超过一年,他会再次被视为新用户。
您可以帮助我了解每月有多少新客户。也就是说,其最低购买日期在该月,并且在该最低日期之前的一年内没有购买任何东西。
我尝试使用此代码,但如果在这种情况下,客户在 2019 年 2 月进行了第一次购买,然后在 2020 年 3 月进行了下一次购买,则只需考虑 2 月的购买,此时他应该是 2019 年 2 月的新用户和 2020 年 3 月
select to_char(B.fp, 'YYYY-MM') month, count(B.email)
from(
select A.email, A.first_purchase fp
from(
select email, date(min(created)) first_purchase
from "Order_table" oo
group by email)A
where A.first_purchase >= (A.first_purchase + INTERVAL '-1 year'))B
group by 1,2
【问题讨论】:
【参考方案1】:使用lag()
:
select to_char(ot.fp, 'YYYY-MM') as yyyymm
count(*) filter (where ot.fp > ot.prev_fp + interval '1 year' or b.prev_fp is null) as cnt_new
from (select ot.*, lag(ot.fp) over (partition by ot.email order by ot.fp) as prev_fp
from Order_table ot
) ot
group by yyyymm;
【讨论】:
你能帮我指出哪个是 t 表,哪个是 b 表吗?这对我来说不是很清楚。非常感谢! 这是正确的??? : select to_char(c.fp, 'YYYY-MM') as yyyymm, count(*) filter (其中 c.fp > c.prev_fp + interval '1 year' 或 c.prev_fp 为空) as cnt_new from (select b .email, b.fp fp , lag(b.fp) over (partition by b.email order by b.fp) as prev_fp from (select email, date(min(created)) fp from "Order_table" oo where oo.付费=真正的电子邮件组)b)c组yyyymm; @GordonLinoff 只有一张桌子。别名应该都是一样的。以上是关于获得客户一年内的首次购买的主要内容,如果未能解决你的问题,请参考以下文章
阿里云年中618-新用户特殊活动-首次购买即可免费使用mysql数据库