Questo è appena fuori dalla mia testa, e sto uscendo dalla porta, quindi non è stato testato. Inoltre, non riesco a immaginare che funzionerebbe molto bene su qualsiasi tipo di set di dati di grandi dimensioni. Ho confermato che almeno funziona senza errori. :)
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