SQL

Moving Average (Window Frame)

admin by @admin ADMIN
just now
May 31, 2026
Public
0 0 up · 0 down Sign in to vote
Add a frame clause (`ROWS BETWEEN N PRECEDING AND CURRENT ROW`) to compute moving averages, sliding sums, rolling stats — anything that needs a bounded look-back.
SQL
Raw
-- 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;
Tags

Save your own code snippets

Create a free account and build your private vault. Share publicly whenever you want.