The Waiting Room

An easy SQL interview practice problem on DataDriven. Write the query and run it against a real database, with instant feedback.

Domain
SQL
Difficulty
easy
Seniority
L3
Asked in
Meta

Problem

Sessions in any other month don't matter: what makes an account idle here is zero sessions in user_sessions during March 2026. Pull the full users profile of every account still in 'pending_verification' status that was idle by that measure.

Signed up. Never verified. Never came back.

Tables

users

Columns: user_id INTEGER, username TEXT, email TEXT, signup_date TEXT, account_status TEXT, age_bucket TEXT

users: 10 of 200 rows
user_idusernameemailsignup_dateaccount_statusage_bucket
100alicealice@example.com2025-02-02inactive25-34
197aaron42aaron42@example.com2026-03-03suspended35-44
294 ameliaamelia@example.com2024-04-04pending_verification45-54
391arjun arjun@example.com2025-05-05active55-64
488ava99ava99@example.com2026-06-06inactive65+
585andrew_kandrew_k@example.com2024-07-07suspendedNULL
682anikaanika@example.com2025-08-08 16:34:00pending_verification18-24
779aidenaiden@example.com2026-09-09 14:53:00active25-34
876aria_baria_b@example.com2024-10-10inactive35-44
973brianbrian@example.com2025-11-11suspended45-54

user_sessions

Columns: session_id INTEGER, user_id INTEGER, device_id INTEGER, session_start TEXT, session_duration_sec INTEGER, pages_viewed INTEGER

user_sessions: 10 of 200 rows
session_iduser_iddevice_idsession_startsession_duration_secpages_viewed
70611972302026-02-02 01:00:00533
71222942592026-03-03 02:00:00766
71833912882026-04-04 03:00:00999
72444883172026-05-05 04:00:0012212
73055853462026-06-06 05:00:0014515
73666823752026-07-07 06:00:0016818
74277794042026-08-08 07:00:0019121
7488876NULL2026-09-09 08:00:0021424
75499734622026-01-10 09:00:0023727
761010704912026-02-11 10:00:0026030

Expected output

First 5 of 47 rows
user_idusernameemailsignup_dateaccount_statusage_bucket
682anikaanika@example.com2025-08-08 16:34:00pending_verification18-24
1070bjorn99NULL2026-03-12pending_verification55-64
2234cara_zcara_z@example.com2026-06-24pending_verification35-44
2622derekderek@example.com2024-04-28pending_verificationNULL
3010dimitridimitri@example.com2025-08-04pending_verification45-54

Worked solution and explanation

What this is really asking

This is an anti-join wearing a verification-queue costume: find the pending accounts with no March footprint. Anyone can write the LEFT JOIN. The move that separates candidates is knowing the March date filter has to ride inside the ON clause, not WHERE. Slip it into WHERE and every unmatched row (NULL session_start) fails the equality, the outer join silently degrades to an inner join, and your 'inactive' list quietly becomes 'active in March' instead.


Break down the requirements

Step 1: Anti-join on user_sessions

LEFT JOIN to user_sessions and keep rows where us.session_id IS NULL. That isolates accounts with zero matched March sessions.

Step 2: Scope the join to March

Push year and month into ON so an account active in February still qualifies if March was empty.

Step 3: Filter on status

account_status = 'pending_verification' is safe in WHERE: it touches only the left side, so it can never drop an unmatched row.


The solution

PENDING USERS WITH NO MARCH SESSIONS
SELECT u.user_id, u.username, u.email, u.signup_date,
       u.account_status, u.age_bucket
FROM users u
LEFT JOIN user_sessions us
  ON u.user_id = us.user_id
 AND strftime('%Y', us.session_start) = '2026'
 AND strftime('%m', us.session_start) = '03'
WHERE u.account_status = 'pending_verification'
  AND us.session_id IS NULL

COMMON FOLLOW-UP QUESTIONS

Common follow-up questions