题解 | #某宝店铺连续2天及以上购物的用户及其对应的天数#
某宝店铺连续2天及以上购物的用户及其对应的天数
https://www.nowcoder.com/practice/63ac3be0e4b44cce8dd2619d2236c3bf
# 连续2天及以上在该店铺购物的用户及其对应的次数(若有多个用户,按user_id升序排序)
# 连续几天,等差数列(按照日期排序,日期-排名=首次日期)
with t as(
# 每个用户行为日期,distinct去重当天重复行为,按用户分组按日期排序
select distinct user_id
,sales_date
,dense_rank()over(partition by user_id order by sales_date ) rk
from sales_tb)
,t1 as(
# 连续登录的日期-排名=初始日期,
# 因此按照用户和初始日期分组,按照行为日期重新dense_rank,可得每个用户每个初始日期下,行为日期排名情况
select user_id
,date_sub(sales_date,interval rk day) as fir_dt
,dense_rank()over(partition by user_id,date_sub(sales_date,interval rk day) order by sales_date) days_count
from t
# 按照行为日期重新dense_rank,可得每个用户每个初始日期下,行为日期排名情况,其中max就是最大连续登录日期
select user_id,days_count)
from t1
group by user_id
having max(days_count)>1
####################################################
汇总如下
select user_id,max(days_count)
from (
select user_id
,dense_rank()over(partition by user_id,date_sub(dt,interval rk day) order by dt) as days_count
from (
select distinct sales_date dt
,user_id
,dense_rank()over(partition by user_id order by sales_date) as rk
from sales_tb )t
)t1
group by user_id
having max(days_count)>1