题目要求是求出连续2天以上购物的用户,这里我们要知道,如果是连续的天数,那么日期-天数,是相当的日期,比如10月5号-10月6号-10月7号,行数分别为1、2、3,那么它们各自的日期减对应的行数都是10月4号,所以这3天就是连续的了,这里求每个用户的购物日期的行数,这里用dense_rank(),,因为有的人是在一天内去了两次,所以不能用rank()
select user_id ,
       count(*) days_count
from (select user_id, 
      sales_date,
      dense_rank() over (partition by user_id order by sales_date) ct
      from sales_tb
     group by user_id,sales_date) a
group by user_id , date_sub(sales_date ,interval ct day)
having count(*) >=2