I found a way to avoid some of not supported commands in standard SQL :
WITH rolling_dates AS (
SELECT
DATE '2024-01-07' AS flash_date
UNION ALL
SELECT DATE_ADD(DATE '2024-01-07', INTERVAL 1 QUARTER)
UNION ALL
SELECT DATE_ADD(DATE '2024-01-07', INTERVAL 2 QUARTER)
UNION ALL
SELECT DATE_ADD(DATE '2024-01-07', INTERVAL 3 QUARTER)
UNION ALL
SELECT DATE_ADD(DATE '2024-01-07', INTERVAL 4 QUARTER)
)
SELECT
* EXCEPT(rn)
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY S.id, flash_date ORDER BY provided_at DESC) AS rn
FROM table S
CROSS JOIN rolling_dates
WHERE deleted.at IS NULL
AND provided_at <= TIMESTAMP(flash_date)
)
WHERE rn = 1
With this request, I can create my view and use it now.