SQL First Purchase Analysis

ROW_NUMBER, partitioned by user, filtered to rn = 1 — the same Top-N-per-Group pattern from earlier.

What & Why

First-purchase analysis finds the earliest completed transaction per customer and attributes later analysis to that milestone. It supports time-to-convert, acquisition attribution, and new-customer reporting.

See How It Works

BUSINESS QUESTION

Use each SaaS account's earliest paid invoice as the internal first-purchase milestone.

idnameplanmrrcreated_atchurned_atcountryemployee_countindustry
1Acme Labsgrowth240.002024-01-08 10:00:00+00NULLUS45software
2Northstar Costarter90.002024-02-12 09:30:00+002024-05-18 12:00:00+00CA18services
3Atlas Worksscale480.002024-03-04 15:10:00+00NULLGB120manufacturing
4Bright Pathgrowth180.002024-04-19 11:45:00+00NULLUS62education
idaccount_idamountstatusdue_datepaid_at
101240.00paid2024-02-012024-01-29 13:00:00+00
111260.00paid2024-03-012024-02-28 16:30:00+00
12290.00overdue2024-03-15NULL
133480.00open2024-04-01NULL
EXAMPLE QUERY
SELECT
  a.id AS account_id,
  a.name,
  MIN(i.paid_at) AS first_purchase_at
FROM saas.accounts a
JOIN saas.invoices i ON i.account_id = a.id
WHERE i.status = 'paid'
  AND i.paid_at IS NOT NULL
GROUP BY a.id, a.name
ORDER BY first_purchase_at, account_id;
RESULT — first paid invoice per account
account_idnamefirst_purchase_at
1Acme Labs2024-01-29 13:00:00+00

Acme Labs is the only account with paid invoices, and invoice 10 supplies its earliest paid_at timestamp.

This lesson's practice is part of Pro.

Advanced business practice

Sign up free to try it on a real business scenario