思路来源某度的连续签到得金币那道题,关键在于算出连续买了几天。 步骤: ①将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