题解 | #某宝店铺连续2天及以上购物的用户及其对应的天数#
某宝店铺连续2天及以上购物的用户及其对应的天数
https://www.nowcoder.com/practice/63ac3be0e4b44cce8dd2619d2236c3bf
看了答案,大部分人都遗漏了一个关键点,是通一个客户是可以有连续2天和连续2天以上的不同情况,这种需要在做一次聚合筛选,才是最完整的步骤。
比如用户 a 1 2 3 56 号分别购物了,那么客户a满足条件的是连续购物2天和连续购物3天的情况同时存在。如果不在做一次聚合的话,那么用户a就出现两次。其实本身题目也有很大歧义性。
最完整的答案
select user_id,max(days_count) days_count
from
(select distinct user_id,count(*) days_count
from(
select distinct user_id,sales_date,
dense_rank()over(partition by user_id order by sales_date) rk
from sales_tb
) t1
group by user_id,date_sub(sales_date,interval rk day)
having days_count >=2 ) t2
group by user_id
order by user_id;
from
(select distinct user_id,count(*) days_count
from(
select distinct user_id,sales_date,
dense_rank()over(partition by user_id order by sales_date) rk
from sales_tb
) t1
group by user_id,date_sub(sales_date,interval rk day)
having days_count >=2 ) t2
group by user_id
order by user_id;

查看1道真题和解析