Ниже для BigQuery Standard SQL
#standardSQL
SELECT
departureDate,
IF(EXTRACT(DAYOFWEEK FROM departureDate) IN (1, 4, 6), ANY_VALUE(cnt), 0) cnt
FROM (
SELECT
departureDate,
COUNT(1) OVER(ORDER BY UNIX_DATE(departureDate) RANGE BETWEEN 1 PRECEDING AND CURRENT ROW) cnt
FROM `project.dataset.table`
WHERE Route = 148
)
GROUP BY departureDate
Должно быть хорошим началом для вас
Вы можете протестировать, поиграть с приведенными выше примерами данных, как в приведенном ниже фиктивном примере, который пытается походить на вашпример
#standardSQL
WITH `project.dataset.table` AS (
SELECT DATE '2019-02-04' departureDate, 148 route UNION ALL
SELECT '2019-02-05', 148 UNION ALL
SELECT '2019-02-06', 148 UNION ALL
SELECT '2019-02-06', 148 UNION ALL
SELECT '2019-02-07', 148 UNION ALL
SELECT '2019-02-08', 148 UNION ALL
SELECT '2019-02-09', 148 UNION ALL
SELECT '2019-02-09', 148 UNION ALL
SELECT '2019-02-10', 148 UNION ALL
SELECT '2019-02-10', 148
)
SELECT
departureDate,
IF(EXTRACT(DAYOFWEEK FROM departureDate) IN (1, 4, 6), ANY_VALUE(cnt), 0) cnt
FROM (
SELECT
departureDate,
COUNT(1) OVER(ORDER BY UNIX_DATE(departureDate) RANGE BETWEEN 1 PRECEDING AND CURRENT ROW) cnt
FROM `project.dataset.table`
WHERE Route = 148
)
GROUP BY departureDate
-- ORDER BY departureDate
с результатом
Row departureDate cnt
1 2019-02-04 0
2 2019-02-05 0
3 2019-02-06 3
4 2019-02-07 0
5 2019-02-08 2
6 2019-02-09 0
7 2019-02-10 4