非常好的一道题,以后可以用来做求连续天数的常用解法。 首先排序,接着将日期减去排序+1则可以得到这个连续的区间的第一天,也不用担心中间中断了怎么办,因为被分到了不同的组 对于interval的用法不太了解,比较熟悉timestampdiff和timestampadd函数,大家有兴趣可以了解一下

select user_id, count(distinct sales_date) as days
from
(select user_id,sales_date,
dense_rank() over(partition by user_id order by sales_date) as diff
from sales_tb
where month(sales_date)=11) base
group by user_id,timestampadd(day,-diff+1,sales_date)
having days>=2
order by user_id