By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
Help with an interesting Postgres question: Why isn't an Index Only Scan used on a partition accessed via the parent table?.
create table pages (
date date,
pageviews int
);
insert into pages values
('2020-02-01'::date, 42),
('2020-02-02'::date, 3),
('2020-02-03'::date, 216),
('2020-02-04'::date, 186),
('2020-02-05'::date, 510),
('2020-02-06'::date, 419),
('2020-02-07'::date, 64),
('2020-02-09'::date, 230)
;
SELECT *,
(pageviews +
(CASE
WHEN (date - LAG(date) OVER (order by date)) <= 2
THEN 1
ELSE 0 END
) * LAG(pageviews) OVER (order by date) +
(CASE
WHEN (date - LAG(date, 2) OVER (order by date)) <= 2
THEN 1
ELSE 0 END
) * LAG(pageviews, 2) OVER (order by DATE)) / 3 AS moving_average
FROM pages
ORDER BY date;
8 rows affected
date | pageviews | moving_average |
---|---|---|
2020-02-01 | 42 | null |
2020-02-02 | 3 | null |
2020-02-03 | 216 | 87 |
2020-02-04 | 186 | 135 |
2020-02-05 | 510 | 304 |
2020-02-06 | 419 | 371 |
2020-02-07 | 64 | 331 |
2020-02-09 | 230 | 98 |