Конфиф с день до условия - PullRequest
       3

Конфиф с день до условия

0 голосов
/ 08 февраля 2019

У меня есть код для подсчета каждого маршрута от автобуса по дате отъезда, но мне нужно посчитать день до отправления в рабочие дни: среда, пятница и воскресенье.

Например, если есть 1 автобусна маршруте 148 и дате: «Вторник, 2019-02-05», я ожидаю, что это число будет подсчитано в «Среде, 2019-02-06» со счетчиком этого дня.

Это нормальный вводрассчитывать по дате:

   Select departureDate, countif(Route) 
   from table 
   group by departureDate

этот запрос дает мне фактические результаты:

  departureDate countif(Route)
  Mon 04-feb-19     1
  Tue 05-feb-19     1
  Wed 06-feb-19     2
  Thu 07-feb-19     1
  Fri 08-feb-19     1
  Sat 09-feb-19     2
  Sun 10-feb-19     2

Но я ожидаю этих результатов:

  departureDate countif(Route)      explanation
  Mon 04-feb-19     0                 No count
  Tue 05-feb-19     0                 No count
  Wed 06-feb-19     3                 1 + 1 + 2
  Thu 07-feb-19     0                 No count
  Fri 08-feb-19     2                   1 + 1
  Sat 09-feb-19     0                 No count
  Sun 10-feb-19     4                   2 + 2

1 Ответ

0 голосов
/ 10 февраля 2019

Ниже для 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      
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...