Advanced SQL: Metric Monitoring, Anomaly Detection, and Data Correctness at Scale Questions
SQL for monitoring a business or operational metric over time and catching when it is wrong or behaving abnormally, as distinct from the mechanics of the SQL constructs used to compute it (window function syntax, frame semantics, CTEs, and subqueries are covered by the companion topic Advanced SQL: Window Functions, CTEs, and Subqueries), from defining and computing cohort retention, funnel conversion, DAU/WAU/MAU, and lifetime value themselves (covered by the companion topics User Retention & Engagement, Conversion Funnel Optimization, and SQL for Data Analysis), and from sessionization via inactivity-gap detection (also covered by the companion window-functions topic). Covers rolling-window anomaly and change-point detection (z-score and threshold-based, including seasonality-aware baselines), testing whether a period-over-period change in a rate metric is statistically significant versus noise, decomposing a metric's change into which segments drove it, average revenue per user (ARPU) at both a simple and a rolling/at-scale altitude, keeping cumulative and rolling metrics correct against missing dates, late-arriving or out-of-order events, and incremental (not full-recompute) materialization at very large scale, approximate-distinct (HyperLogLog) computation, standalone timezone/daylight-saving-aware day bucketing, Kaplan-Meier-style survival curves computed in pure SQL, and multi-state subscription churn and retention (renewals, expansions, downgrades, and pauses at the plan level, not just customer presence/absence).
Propose an approach to compute an incremental cumulative metric (for example, running revenue per user) in BigQuery without recomputing the entire history nightly. Describe the table design (partitioning, clustering), the merge/upsert pattern you would use, and how you would handle corrections that land in already-processed historical partitions.
Write an ANSI SQL query to compute monthly ARPU (average revenue per user) for January 2025 by region, using a subscriptions table where a subscriber counts as active in the month if their subscription overlaps it. Explain your assumptions.
A metric such as daily revenue or a per-segment event count is monitored with a rolling N-day mean and standard deviation, flagging a day as anomalous when its z-score exceeds a threshold. Write the SQL, then explain two ways this naive approach breaks in practice: it fires false positives on days with genuine weekly seasonality (a Monday should be compared to prior Mondays, not to the raw trailing window), and the underlying mean/variance estimate itself gets noisy early in a series or for low-volume segments.
Events feeding a rolling or cumulative metric (for example a rolling active-count or a cohort-style metric) can arrive up to two weeks late, and out of order across regions. Design a robust approach to keep the metric correct: describe watermarking and backfill windows, write SQL or pseudocode for idempotent writes, and explain how you would schedule re-computation or incremental updates. Discuss the trade-off between how quickly the metric is available and how accurate it is once all late data has landed.
Describe how timezone differences and daylight-saving transitions can affect a daily cohort assignment or any window-based aggregate that buckets events by calendar day. Provide SQL that normalizes event timestamps to UTC and then assigns the bucket consistently across regions, and list the pitfalls and testing strategies you would use to catch a timezone-boundary bug before it reaches production.
Unlock Full Question Bank
Get access to all 14 Advanced SQL: Metric Monitoring, Anomaly Detection, and Data Correctness at Scale interview questions and detailed answers.
Sign in to ContinueJoin thousands of developers preparing for their dream job.