题解 | #某宝店铺连续2天及以上购物的用户及其对应的天数#
某宝店铺连续2天及以上购物的用户及其对应的天数
https://www.nowcoder.com/practice/63ac3be0e4b44cce8dd2619d2236c3bf
with
rankList as (
select
sales_date,
user_id,
rankingnum,
date_sub(sales_date,interval rankingnum day) as newdate # 在这个查询中,利用date_sub函数,如果sales_date 减去 rankingnum是一个固定的值,就说明是连续购买的。
from (
select
sales_date,
user_id,
rank()over(partition by user_id order by sales_date) as rankingnum # 在第二次子查询中根据rank窗口函数按照user_id分类,sales_date 升序排序,就可以知道一个人从早到之后的购买时间,但是此时已然不知道客户是否是连续购买。
from (
select
distinct sales_date,
user_id
from
sales_tb #这是最内部的子查询因为有用户当日会多次购买,但是当日的多次记录次数只需要记录一次购买记录,所以先通过distinct关键词记录有交易的当日的一次记录
) t1
) t2
)
select
user_id,
count(newdate)
from rankList
group by
user_id,
newdate #根据客户id和sales_date 减去 rankingnum的值分类,就知道哪些客户连续购买了产品
having
count(newdate) >= 2
本题思路和之前的连续签到领金币的思路是一致的,就是购买日期 - 排序号 为一个固定值,根据固定值和user_id进行聚合,查询出现的次数就可以判断是否为连续出现2次以上。
查看21道真题和解析

