1、理解题意:统计连续2天及以上在该店铺购物的用户及其对应的次数
(1)对应次数的统计,要注意存在1位用户在1天之内多次购买记录,需要进行去重;
(2)连续2天及以上,可以利用row_number和date_sub结合处理,即当 “原date - 对应row_number的rank = 相同1值” 时,这种结果出现2次及以上,就符合 “连续2天及以上” 的要求。
2、实操:
(1)利用row_number对用户下单日期进行排序:
with k1
as
(
select user_id,sales_date,
row_number() over(partition by user_id order by sales_date) as rank1
from sales_tb
)
结果展示:
1 1|2021-11-01|1
2 2|2021-11-01|1
3 2|2021-11-01|2
4 3|2021-11-02|1
5 4|2021-11-02|1
6 5|2021-11-03|1
7 6|2021-11-03|1
8 7|2021-11-04|1
9 8|2021-11-04|1
10 9|2021-11-04|1
11 10|2021-11-05|1
12 10|2021-11-05|2
13 10|2021-11-05|3
14 10|2021-11-06|4
15 11|2021-11-06|1
(2)在排序之后,按照user进行分组统计,内部再按照《sales_date - 对应rank = 同1个数值》进行分类/分组统计,若“同1个数值” 的数量 >= 2个,那么就符合《连续2天及以上》的要求(having count(user_id) >= 2)
select user_id,
count(user_id) as days_count
from k1
group by user_id,date_sub(sales_date,interval rank1 day)
having count(user_id) >= 2