思路来源某度的连续签到得金币那道题,关键在于算出连续买了几天。
步骤:
①将uid去重分组,按照日期排序,然后用日期与排序编号做差得到一个日期dt,只要做dt相同即表明连续购买。
②count上述相同dt的数量即得到每个uid连续购买的天数,取出最大值即可。

select user_id, max(days_count)
from(
select distinct user_id, count(dt)over(partition by user_id, dt) as days_count
from(
select distinct user_id, sales_date,
date_sub(sales_date, interval dense_rank()over(partition by user_id order by sales_date) day) as dt
from sales_tb) as tb1
) as tb2
where days_count>=2
group by user_id