Dit is zo uit mijn hoofd, en ik ben onderweg naar buiten, dus het is niet getest. Ik kan me ook niet voorstellen dat het erg goed zou presteren op een grote dataset. Ik heb wel bevestigd dat het in ieder geval zonder fouten werkt. :)
SELECT
value_column1,
(
SELECT
AVG(value_column1) AS moving_average
FROM
Table1 T2
WHERE
(
SELECT
COUNT(*)
FROM
Table1 T3
WHERE
date_column1 BETWEEN T2.date_column1 AND T1.date_column1
) BETWEEN 1 AND 20
)
FROM
Table1 T1