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

全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务