Skip to content
RED SAGSkills

Daily Active Users with a 3-Day Average

From app_events, compute daily active users (dau): the number of distinct users with at least one event on that date. Only dates with events appear.

For each such date also compute avg_3d: the average dau over the calendar window from 2 days before through that date, using only the dates in the window that have events. Round with ROUND(x, 2).

Return columns event_date, dau, avg_3d. Order by event_date ascending.

Schema

CREATE TABLE app_events (
  event_id INTEGER PRIMARY KEY,
  user_id INTEGER NOT NULL,
  event_date TEXT NOT NULL,
  event_name TEXT NOT NULL
);

Sample data

app_events

event_iduser_idevent_dateevent_name
112026-06-01open
222026-06-01open
312026-06-01click
412026-06-02open
532026-06-02open
642026-06-02open
722026-06-03open
812026-06-04open
922026-06-04open
1032026-06-04open
1142026-06-04open
Hint 1

A ROWS frame counts rows, not days. When dates are missing, "2 rows back" can be a week back.

Hint 2

Order the window by julianday(event_date) and use RANGE BETWEEN 2 PRECEDING AND CURRENT ROW.

Good practice for: Data Analyst, Product Manager, Data Scientist, Data Engineer

SQL (SQLite)

Run checks your query on the sample data (Ctrl + '). Submit also checks hidden databases.