To jest tuż za czubkiem mojej głowy i właśnie wychodzę za drzwi, więc nie zostało przetestowane. Nie wyobrażam sobie również, aby działał bardzo dobrze na jakimkolwiek dużym zbiorze danych. Potwierdziłem, że przynajmniej działa bezbłędnie. :)
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