Ниже для BigQuery Standard SQL
#standardSQL
SELECT *,
SUM(amount) OVER(
PARTITION BY customer_id
ORDER BY DATE_DIFF(`date`, '2000-01-01', MONTH)
RANGE BETWEEN 3 PRECEDING AND 1 PRECEDING
) AS rolling_3m_ammount
FROM `project.dataset.table`
Примечание: пример данных в вашем вопросе и комментариях - я предполагаю, что все даты - первый день месяца!
Вы можете протестировать, поиграть с вышеупомянутыми, используя пример / фиктивные данные, как в примере ниже
#standardSQL
WITH `project.dataset.table` AS (
SELECT DATE '2020-01-01' `date`, 'A' customer_id, 1.0 amount UNION ALL
SELECT '2020-02-01', 'A', 2.0 UNION ALL
SELECT '2020-03-01', 'A', 3.0 UNION ALL
SELECT '2020-04-01', 'A', 4.0 UNION ALL
SELECT '2020-05-01', 'A', 5.0 UNION ALL
SELECT '2020-07-01', 'A', 6.0 UNION ALL
SELECT '2020-09-01', 'A', 7.0
)
SELECT *,
SUM(amount) OVER(
PARTITION BY customer_id
ORDER BY DATE_DIFF(`date`, '2000-01-01', MONTH)
RANGE BETWEEN 3 PRECEDING AND 1 PRECEDING
) AS rolling_3m_ammount
FROM `project.dataset.table`
-- ORDER BY `date`
с выводом
Row date customer_id amount rolling_3m_ammount
1 2020-01-01 A 1.0 null
2 2020-02-01 A 2.0 1.0
3 2020-03-01 A 3.0 3.0
4 2020-04-01 A 4.0 6.0
5 2020-05-01 A 5.0 9.0
6 2020-07-01 A 6.0 9.0
7 2020-09-01 A 7.0 6.0