题解 | #某宝店铺连续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

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务