首页 > 解决方案 > 如何使用 Holistic (SQL) 获得在 7 天内购买超过 3 次的客户

问题描述

客户ID 订单号 创建于
A1B3 vds34rve4-3f 2021 年 1 月 1 日
AA2B hvdhkc767-s3d 2021 年 1 月 1 日
EA986 bckd33rfvfbvdf 2021 年 1 月 1 日
A1B3 jdbjkvshb3rdec 2021 年 1 月 1 日
SFK3 bhabsd-bbc83ccs 2021 年 2 月 1 日
AA2B hcbadcbsbc7cd 2021 年 3 月 1 日
A1B3 hjjac73an83-3fc 2021 年 7 月 1 日
DEH32 gdyafjk-24vfd 2021 年 7 月 1 日
A1B3 jkhbdj434jcbjke 2021 年 7 月 1 日
AA2B jkkcbjq90ksnc 2021 年 8 月 1 日
AA2B cjbugd3ahsddka 2021 年 8 月 1 日
A1B3 kbcq7w69ufj4t4 2021 年 9 月 1 日
SFK3 bcdubi7wklcna8 2021 年 9 月 1 日
EA986 cbyatea4jwndns 2021 年 9 月 1 日
A1B3 biqbdepaljkcl9 2021 年 9 月 1 日
SFK3 nuqya8wownd2ln2 2021 年 9 月 1 日
A1B3 ndkuq2uowmdlqn 2021 年 9 月 1 日

表名:purchaseTable

列字段是: -

满足条件的一位客户可以多次出现(7天内购买超过3次)

输出:

例如

用户 ID A1B3,2021 年 1 月 1 日购买了 2 次,2021 年 1 月 7 日购买了 2 次,2021 年 1 月 9 日购买了 3 次

输出将是

A1B3 | 1/1/2021 | 7/1/2021 | 4
A1B3 | 7/1/2021 | 9/1/2021 | 5

标签: sql

解决方案


基本上你需要下面的方法

  Select * from (
   Select customerid, sum(case when start_date 
      <=start_date+7 and countorderid>=1 then 1 else 0 end) as 
        final_cnt
   From table group by customerid ) 
   Where final_cnt >=3

反过来,通过您的表格结构,逻辑将被下面包围。

 With Cte as (Select customerid, createdate, count(*) as 
           ordercount from 
   purchaseTable group by customerid, createdate order by 
  createdate) 
Select sum(case when createdate<=createdate+7 then 
           ordercount end) from CTE
PIVOT (for cretaedate between createdate and createdate+7) 

推荐阅读