DAU/MAU Stickiness for March

Compute product stickiness for March 2026: average DAU across all 31 days of March divided by March MAU (distinct users active at any time in March). Days with no activity count as 0 DAU.

Expected output

avg_dau (rounded to 2 decimals), mau, stickiness_pct (avg_dau / mau as a percentage, rounded to 1 decimal).

Row order is checked. Column names are not checked; numbers are compared to 2 decimals.

Dataset: B2B SaaS product events

A project-management SaaS: company accounts, their users, product event logs (Jan to Apr 2026) and subscription history.

accounts

One row per customer company.

account_idINTEGERprimary key
companyTEXT
industryTEXT
countryTEXT
created_atTEXTYYYY-MM-DD
users

One row per user. Every user belongs to one account.

user_idINTEGERprimary key
account_idINTEGER
signup_dateTEXTYYYY-MM-DD, same day as the user's signup event
acquisition_channelTEXTorganic, paid_search, referral or partner
countryTEXT
events

Product event log. Data ends on 2026-04-30.

event_idINTEGERprimary key, increases with event_time
user_idINTEGER
event_nameTEXTsignup, login, view_dashboard, export_report, create_project, invite_teammate, upgrade_click
event_timeTEXTYYYY-MM-DD HH:MM:SS (UTC)
subscriptions

Paid subscription periods per account. An account with no rows is on the free plan.

subscription_idINTEGERprimary key
account_idINTEGER
planTEXTteam or business
mrrREALmonthly recurring revenue in USD
started_atTEXTYYYY-MM-DD, inclusive
ended_atTEXTYYYY-MM-DD, exclusive; NULL while active. May be in the future for a scheduled cancellation.

Engine: SQLite. Dates are text (YYYY-MM-DD); use strftime(), date() and julianday() for date math.

Related problems

SQLite · runs in your browser
Ctrl/⌘ + Enter to run
Expected output preview (1 row, order matters)
avg_daumaustickiness_pct
9.037412.2

Hints

Worked solution

Run at least one query to unlock it.