sql - 如何使用 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
列字段是: -
- 客户ID
- 订单号
- 创建于
满足条件的一位客户可以多次出现(7天内购买超过3次)
输出:
- 客户ID
- 开始日期
- 结束日期
- countOrderid
例如
用户 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
解决方案
基本上你需要下面的方法
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)
推荐阅读
- java - 如何正确重启 Spring Boot 应用程序?
- jquery - 输入@后立即完成电子邮件输入
- postgresql - 如何使用 PostgreSQL 10.5 表或视图中的数据/字段填充 Vaadin 12.0.4 网格?
- angular - 有没有办法使用过滤管道搜索两个或更多项目?
- android - 使用Retrofit(Okhttp)时如何从android studio中的log cat复制请求正文,标头(不带标签)?
- javascript - 避免嵌套循环
- php - PHP 警告:fsockopen(): 无法连接到 example.com:8010(连接被拒绝)CentOS SELinux
- amp-html - 如何修复在 AMP 中提交时的联系表单错误?
- unix - 使用 last 获取用户的最后 8 次登录
- google-apps-script - 如何让用户使用 Google 登录以访问已部署的 GAS Web 应用程序?