select a.user_id,count(b.user_id)
FROM
(select DISTINCT user_id,DATE_FORMAT(create_date,"%Y-%m-%d") as my_date
from order
order by user_id,my_date) as a
left join (select DISTINCT user_id,DATE_FORMAT(create_date,"%Y-%m-%d") as my_date
from order
order by user_id,my_date) as b on b.user_id=a.user_id and b.my_date>=b.my_date and b.my_date<=DATE_FORMAT(DATE_ADD(a.my_date,INTERVAL 5 DAY),'%Y-%m-%d')
group by a.user_id,a.my_date
having count(b.user_id)=5
类似这种形式,建立一个虚拟表,以日期为例,查询所有id和日期对应的数据,再join一次,条件是大于等于原日期,小于等于原日期加N日,如果查出来的条数等于N,证明有连续N天符合条件。