获得客户一年内的首次购买

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 只有一张桌子。别名应该都是一样的。

以上是关于获得客户一年内的首次购买的主要内容,如果未能解决你的问题,请参考以下文章

如何通过Apple TestFlight测试应用内购买?

提交应用程序购买以供第一次审核

iPhone : 应用内购买必须与新的应用版本一起提交

阿里云年中618-新用户特殊活动-首次购买即可免费使用mysql数据库

阿里云年中618-新用户特殊活动-首次购买即可免费使用mysql数据库

递归跟踪购买月份的 SQL 查询