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