SQL
Lab
Meta Meta Interview Question 06

Consecutive
Login
Days

Find users who logged in for 3 consecutive days.

Table Schema

Inspect
Table

interactive
ColumnType
user_idinteger
login_datedate

Sample Data

Input
Output

Sample Input: logins
user_idlogin_date
1012024-01-01
1012024-01-02
1012024-01-03
1022024-01-01
1022024-01-03
1032024-01-05
1042024-01-06
Expected Output
user_id
101

SQL Editor

Run
Query

postgresql
Waiting for query

user_id
101

Hints

Unlock
Clues

Hint 01: Identify the grouping level required by the output.
Hint 02: Aggregate with COUNT, SUM, AVG, or a window function as needed.
Hint 03: Filter after aggregation with HAVING or after ranking with an outer query.

Solution

Locked
Answer

Solution is locked until you decide to reveal it. Try the editor first, then open this when you want the reference answer.

WITH distinct_days AS (
  SELECT DISTINCT user_id, login_date
  FROM logins
),
streaks AS (
  SELECT
    user_id,
    login_date - ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY login_date)::int AS streak_group
  FROM distinct_days
)
SELECT user_id
FROM streaks
GROUP BY user_id, streak_group
HAVING COUNT(*) >= 3;

Explanation

Step By
Step

01

Read the expected output columns to determine the final grain.

02

Aggregate or rank the input rows to calculate the requested metric.

03

Filter, sort, and alias the final columns to match the output.

Related Questions

Keep
Solving