题解 | #某宝店铺连续2天及以上购物的用户及其对应的天数#

某宝店铺连续2天及以上购物的用户及其对应的天数

https://www.nowcoder.com/practice/63ac3be0e4b44cce8dd2619d2236c3bf

对于连续类问题,思路:构造新的一列a,a列必须是根据对应时间排好序的。因为a列有序,同时跟本就有序的时间列相减,此时如果是连续两天购买,那么相减后值就会相同,具体演示如下。

    select sales_date,
        user_id,
        date_sub(sales_date, interval rank() over(partition by user_id order by sales_date asc) day) as rank1
    from sales_tb
	# 此处根据sale_date, user_id进行分组的原因是为了去重,使单个用户一天只能有一条购买记录。避免构造的新列产生多个相同的值
    group by sales_date, user_id

此时得到3列,分别是sales_date, user_id, rank1。此时只需再根据user_id, rank1分组,进行count(1)计数即可得到连续购买的天数。

select t1.user_id,
    count(1) as days_count
from (
    select sales_date,
        user_id,
        date_sub(sales_date, interval rank() over(partition by user_id order by sales_date asc) day) as rank1
    from sales_tb
    group by sales_date, user_id
) t1
group by t1.user_id, t1.rank1
having count(1) >= 2

全部评论

相关推荐

积极的小学生不要香菜:你才沟通多少,没500不要说难
点赞 评论 收藏
分享
牛客刘北:如果暑期实习是27届的话,你要晚一年才会毕业,企业为什么会等你呢?要搞清时间逻辑呀!27届现在实习只能是在暑假实习,这是日常实习,不是暑期实习。所以多去投日常实习吧,暑期实习肯定不会要你的
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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