SQL QuestSQL Interview Questions › Joins

Multi-Month Active Customers

MediumFreeQuerying BasicsJoinsAggregation & GroupingDate Functions

Meta's retention team defines a multi-month active user as one who's shown up in at least 2 different calendar months — the minimum threshold for counting as 'retained' in their internal MAU reports. For each such customer, show name, membership, distinct_months (count of unique YYYY-MM values in their orders), and total_orders. Sort by distinct_months descending, then total_orders descending. COUNT(DISTINCT ...) over a date-formatted expression is the pattern every Meta growth team runs weekly — you'll see this exact query in Meta Data Analyst interviews dressed up in a dozen different business contexts (multi-month active users, multi-week engagers, multi-session shoppers).

Solve it in the browser editor →

Runs on SQLite in your browser, graded against the expected result, no signup. A wrong answer gets a diagnosis, not just "incorrect".

Schema

customers

customer_idnameemailsignup_datemembershiptotal_orders
1John Smithjohn.smith@email.com2023-01-15Gold15
2Emma Wilsonemma.wilson@email.com2023-03-20Silver8
3Michael Brownmichael.brown@email.com2023-02-10Gold12

orders

order_idcustomer_idproductcategoryquantitypricetotalorder_datecountrystatus
11Laptop ProElectronics11299.991299.992024-01-15USAcompleted
22Wireless MouseElectronics249.9999.982024-01-16Canadacompleted
33Office ChairFurniture1349.99349.992024-01-17USAcompleted

Expected output: Alice | Gold | 2 | 3

Hint

COUNT(DISTINCT strftime('%Y-%m', o.order_date)) gives distinct months per customer. Use HAVING to keep only those with >= 2. Remember: HAVING filters AFTER GROUP BY, WHERE filters BEFORE.

Concepts

SELECT JOIN GROUP BY HAVING COUNT DISTINCT Date Functions JOIN + COUNT DISTINCT

Practise the topic: SQL practice questions · JOIN practice · GROUP BY exercises · Date function practice

In these company practice sets

Airbnb · Anthropic · Apple · Meta · Netflix · OpenAI · Revolut · Stripe · Wise · Walmart · Microsoft · LinkedIn

A SQL Quest challenge matched to patterns reported for these companies — not a question any of them has published.

Related questions

Customers Who Never OrderedMedium · FreeAbove-Average Departments (Derived Table)Medium · FreeLEFT JOIN NULL Semantics: Inactive CustomersMedium · FreeManagement Hierarchy OverviewMedium · FreeCount Direct ReportsMedium · FreeCustomer Recency AnalysisMedium · Free

Where would this cost you points in an interview?

Ten questions, no signup: a Skillmap across nine SQL skills and the one to fix first.

Take the readiness test