连续类的问题
- 按照判断连续的字段(这里是日期)加上编号(以用户为分区字段,日期排序)。(这里存在同一个日期多个购买记录,所以用dense_rank编号最合适)
- 将编号和日期相减,如果连续的话,差值会相等
- 再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