-- 7-day moving average of daily signups
SELECT day,
signups,
AVG(signups) OVER (
ORDER BY day
ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
) AS ma_7d
FROM daily_signups
ORDER BY day;
-- Centered 5-day moving average (2 before, 2 after)
SELECT day,
revenue,
AVG(revenue) OVER (
ORDER BY day
ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING
) AS ma_5d_centered
FROM daily_revenue;
-- Time-based frame (PostgreSQL) — last 7 days regardless of row count
SELECT ts, value,
AVG(value) OVER (
ORDER BY ts
RANGE BETWEEN INTERVAL '7 days' PRECEDING AND CURRENT ROW
) AS rolling_7d_avg
FROM metrics;
Create a free account and build your private vault. Share publicly whenever you want.