题解 | #某宝店铺连续2天及以上购物的用户及其对应的天数#
某宝店铺连续2天及以上购物的用户及其对应的天数
https://www.nowcoder.com/practice/63ac3be0e4b44cce8dd2619d2236c3bf
with A as( select user_id, sales_date, row_number() over(partition by user_id order by sales_date) 'rn'#A①排序 from sales_tb) select user_id, count(*) days_count from A group by #B.如何把连续的时间抽出来 user_id, date_add(sales_date,INTERVAL -rn day) #A②作差 having count(*)>=2 #C.如何限制连续的时间是多久
一、分析题目意思
请你统计连续2天及以上在该店铺购物的用户及其对应的天数(若有多个用户,按user_id升序排序)
根据题目意思,我们要在原始表中查出的表呈现的是两列,一列的是用户user_id,一列是这个用户连续购物天数
初步思考:观察题目给到的用户信息表 是按照一天一条记录,所以练习购物天数 可以对日期连续的购物记录求和去呈现出来 ,再按照不同用户分组 就能得出正确答案啦。所以难点在于如何取出时间连续的每个用户的购物记录?
1.利用窗口函数先对日期进行排序
select user_id, sales_date, ROW_number() over(PARTITION by user_id ORDER BY sales_date) as 'rn',#①排序 day(sales_date) as dayn FROM sales_tb
2.结合等差数列的思想,如果日期是练习的,那么日期-排序号的差值是一样的
3.运用date_add函数作差,求出差值
with t as( select user_id, sales_date, row_number() over(partition by user_id order by sales_date) 'rn'#A①排序 from sales_tb) select user_id, count(*)days_count from t group by #B.如何把连续的时间抽出来 user_id, date_add(sales_date,INTERVAL -rn day) #A②作差 having count(*)>=2
