WITH t1 AS (
SELECT sales_date,
user_id,
DENSE_RANK() over (PARTITION BY user_id ORDER BY sales_date ASC) AS rank_num
FROM sales_tb
GROUP BY sales_date, user_id
),
t2 AS (
SELECT user_id,
DATE_ADD(sales_date, INTERVAL - rank_num DAY ) AS origin_date
FROM t1
),
t3 AS (
SELECT user_id,
count(origin_date) AS days_count
FROM t2
GROUP BY user_id
),
t4 AS (
SELECT *
FROM t3
WHERE days_count >= 2
ORDER BY user_id ASC
)
SELECT * FROM t4;
# 这道题的关键在于如何在第一步进行(用户,日期)去重操作!

京公网安备 11010502036488号