连续类的问题

  1. 按照判断连续的字段(这里是日期)加上编号(以用户为分区字段,日期排序)。(这里存在同一个日期多个购买记录,所以用dense_rank编号最合适)
  2. 将编号和日期相减,如果连续的话,差值会相等
  3. 再count做出来的差值,就可以知道连续的次数
SELECT
	user_id,COUNT(*) days_count
FROM
	(SELECT
	 DISTINCT user_id,sales_date,DENSE_RANK() over(PARTITION by user_id ORDER BY sales_date) rn
FROM
	sales_tb) a
GROUP BY
	user_id,DATE_ADD(sales_date,INTERVAL - rn day)
HAVING
	days_count >=2
ORDER BY
	user_id