WITH x AS (
SELECT user_id, day,
ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY day) AS rn
FROM Logins
), g AS (
SELECT user_id, day, rn,
DATEADD(day, -rn, day) AS grp
FROM x
)
SELECT DISTINCT user_id
FROM g
GROUP BY user_id, grp
HAVING COUNT(*) >= 3;
WITH x AS (
SELECT user_id, day,
ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY day) AS rn
FROM Logins
), g AS (
SELECT user_id, day, rn,
DATEADD(day, -rn, day) AS grp
FROM x
)
SELECT DISTINCT user_id
FROM g
GROUP BY user_id, grp
HAVING COUNT(*) >= 3;