Посчитайте день до и сегодня - PullRequest
0 голосов
/ 11 февраля 2019

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

У меня есть вид спеременные: DEP_DATE (DATE), DepartureDate (Datetime), Routes (Числовые) вот так

DEP_DATE    DepartureDate Route= 139 Route= 148 Route=129 Route=61 Route=134 Route=60
08/02/2019  2019-02-08T15:00:00 0   0   0   0   0   0
08/02/2019  2019-02-08T10:45:00 0   0   0   0   0   0
08/02/2019  2019-02-08T08:30:00 0   0   0   0   0   0
08/02/2019  2019-02-08T08:15:00 0   0   0   0   0   0
08/02/2019  2019-02-08T21:00:00 0   0   0   0   0   0
08/02/2019  2019-02-08T13:00:00 0   0   0   0   0   0
08/02/2019  2019-02-08T06:30:00 0   0   0   11  0   0
08/02/2019  2019-02-08T19:00:00 0   0   21  0   0   0
08/02/2019  2019-02-08T06:00:00 0   0   0   0   10  13
08/02/2019  2019-02-08T17:30:00 0   0   2   0   0   0
08/02/2019  2019-02-08T05:30:00 1   0   0   0   0   0
08/02/2019  2019-02-08T14:45:00 0   0   0   0   0   0
08/02/2019  2019-02-08T07:00:00 0   0   0   0   0   0
09/02/2019  2019-02-09T20:15:00 0   0   0   0   0   0
09/02/2019  2019-02-09T22:00:00 0   2   0   0   0   0
09/02/2019  2019-02-09T20:30:00 0   0   8   0   0   0
09/02/2019  2019-02-09T08:30:00 0   0   0   0   0   0
09/02/2019  2019-02-09T07:00:00 0   0   0   12  0   0
09/02/2019  2019-02-09T19:00:00 0   0   12  0   0   0
09/02/2019  2019-02-09T06:00:00 0   0   0   0   20  7
09/02/2019  2019-02-09T15:00:00 0   0   0   0   0   0
09/02/2019  2019-02-09T06:30:00 0   0   0   0   0   0
09/02/2019  2019-02-09T08:15:00 0   0   0   0   0   0
09/02/2019  2019-02-09T18:15:00 0   0   0   0   0   0
09/02/2019  2019-02-09T14:45:00 0   0   0   0   0   0
09/02/2019  2019-02-09T13:00:00 0   0   0   0   0   0
10/02/2019  2019-02-10T21:00:00 0   0   0   0   0   0
10/02/2019  2019-02-10T10:45:00 0   0   0   0   0   0
10/02/2019  2019-02-10T06:00:00 0   0   0   0   11  11
10/02/2019  2019-02-10T13:00:00 0   0   0   0   0   0
10/02/2019  2019-02-10T08:30:00 0   0   0   0   0   0
10/02/2019  2019-02-10T08:15:00 0   0   0   22  0   0
10/02/2019  2019-02-10T19:00:00 0   0   21  0   0   0
10/02/2019  2019-02-10T07:00:00 0   0   0   0   0   0
10/02/2019  2019-02-10T20:15:00 0   0   0   0   0   0
10/02/2019  2019-02-10T15:00:00 0   0   0   0   0   0
10/02/2019  2019-02-10T20:30:00 0   1   2   0   0   0
10/02/2019  2019-02-10T06:30:00 0   0   0   0   0   0
10/02/2019  2019-02-10T18:15:00 0   0   0   10  0   0
11/02/2019  2019-02-11T19:00:00 0   0   32  0   0   0
11/02/2019  2019-02-11T08:30:00 0   0   0   0   0   0
11/02/2019  2019-02-11T06:00:00 0   0   0   0   14  12
11/02/2019  2019-02-11T00:45:00 0   0   0   0   0   0
11/02/2019  2019-02-11T15:00:00 0   0   0   0   0   0
11/02/2019  2019-02-11T08:15:00 0   0   0   0   0   0
11/02/2019  2019-02-11T13:00:00 0   0   0   0   0   0
11/02/2019  2019-02-11T06:30:00 0   0   0   0   0   0
11/02/2019  2019-02-11T07:00:00 0   0   0   0   0   0
11/02/2019  2019-02-11T10:45:00 0   0   0   0   0   0
12/02/2019  2019-02-12T08:30:00 0   0   0   0   0   0
12/02/2019  2019-02-12T13:00:00 0   0   0   0   0   0
12/02/2019  2019-02-12T06:00:00 0   0   0   0   10  8
12/02/2019  2019-02-12T15:00:00 0   0   0   0   0   0
12/02/2019  2019-02-12T10:45:00 0   0   0   0   0   0
12/02/2019  2019-02-12T07:00:00 0   0   0   0   0   0
12/02/2019  2019-02-12T14:45:00 0   0   0   15  0   0
12/02/2019  2019-02-12T19:00:00 0   0   14  0   0   0
12/02/2019  2019-02-12T22:00:00 0   2   0   0   0   0
13/02/2019  2019-02-13T13:00:00 0   0   0   0   0   0
13/02/2019  2019-02-13T18:15:00 0   0   0   0   0   0
13/02/2019  2019-02-13T08:15:00 0   0   0   0   0   0
13/02/2019  2019-02-13T20:15:00 0   1   0   0   0   0
13/02/2019  2019-02-13T15:00:00 0   0   0   0   0   0
13/02/2019  2019-02-13T14:45:00 0   0   0   0   0   0
13/02/2019  2019-02-13T08:30:00 0   0   0   0   0   0
13/02/2019  2019-02-13T07:00:00 0   0   0   0   0   0
13/02/2019  2019-02-13T06:00:00 0   0   0   0   7   7
13/02/2019  2019-02-13T21:00:00 0   0   0   0   0   0
13/02/2019  2019-02-13T06:30:00 0   0   0   3   0   0
13/02/2019  2019-02-13T19:00:00 0   0   24  0   0   0
14/02/2019  2019-02-14T18:15:00 0   0   0   0   0   0
14/02/2019  2019-02-14T20:30:00 0   0   3   0   0   0
14/02/2019  2019-02-14T07:00:00 0   0   0   0   0   0
14/02/2019  2019-02-14T06:00:00 0   0   0   0   4   2
14/02/2019  2019-02-14T15:00:00 0   0   0   10  0   0
14/02/2019  2019-02-14T19:00:00 0   0   10  0   0   0
14/02/2019  2019-02-14T13:00:00 2   0   0   0   0   0
14/02/2019  2019-02-14T08:30:00 0   0   0   0   0   0

И мой код, который я сделал, выглядит так:

 SELECT
 DEP_DATE,
 COUNTIF( RouteId = 139) + COUNTIF( RouteId = 148 AND DepartureDate = 
 DATETIME_SUB(departureDate, INTERVAL 1 DAY)) AS BUS_1,
 COUNTIF( RouteId = 134 ) + COUNTIF( RouteId = 60 ) AS BUS_2,
 COUNTIF( RouteId = 134 AND EXTRACT(HOUR  FROM  DepartureDate) = 6) + 
 COUNTIF( RouteId = 60 AND EXTRACT(HOUR  FROM  DepartureDate) = 6)  AS 
 BUS_3,
 FROM
 `project.dataset.view`

 WHERE
 DepartureDate > 
 DATETIME_TRUNC(DATETIME_SUB(CURRENT_DATETIME("America/Lima"), INTERVAL 3 
 DAY),DAY)  

 GROUP BY
 DEP_DATE

Мои результатыкак это

DEP_DATE Bus_1 Bus_2 Bus_3   Explanation_Bus_1:   Route_139  Route_148
08/02/2019  1   34  23                             1           0
09/02/2019  2   32  27                             0           2
10/02/2019  1   45  22                             0           1
11/02/2019  0   42  26                             0           0
12/02/2019  2   29  18                             2           0
13/02/2019  0   27  14                             0           1
14/02/2019  3   23  6                              2           0

Но что я ожидаю, мой счет на «Bus_1» выглядит так:

DEP_DATE Bus_1 Bus_2 Bus_3   Explanation_Bus_1:   Route_139  Route_148
08/02/2019  1   34  23                             1           0
09/02/2019  0   32  27                             0           2
10/02/2019  2   45  22                             0           1
11/02/2019  1   42  26                             0           0
12/02/2019  2   29  18                             2           0
13/02/2019  0   27  14                             0           1
14/02/2019  3   23  6                              2           0

Каждый счет маршрута 148 должен быть посчитан на следующий день в автобусе 1

1 Ответ

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

Вам необходимо проверить, является ли дата пятницей, средой или субботой.Если это один из этих дней, то по умолчанию рассчитывается значение 0.

Условные выражения для большого запроса: https://cloud.google.com/bigquery/docs/reference/standard-sql/conditional_expressions

Функции даты большого запроса: https://cloud.google.com/bigquery/docs/reference/standard-sql/date_functions

  • DAYOFWEEK: Возвращает значения в диапазоне [1,7] с первым днем ​​недели в воскресенье.

Попробуйте сделать это:

 SELECT
 T1.DEP_DATE,
 T2.BUS_1 AS BUS_1,
 COUNTIF( RouteId = 134 ) + COUNTIF( RouteId = 60 ) AS BUS_2,
 COUNTIF( RouteId = 134 AND EXTRACT(HOUR  FROM  DepartureDate) = 6) + 
 COUNTIF( RouteId = 60 AND EXTRACT(HOUR  FROM  DepartureDate) = 6)  AS 
 BUS_3,
 FROM
 `project.dataset.view` T1

 LEFT JOIN (
    SELECT 
        DATEADD(DEP_DATE, 1, DAY) AS DEP_DATE,
        COUNTIF(RouteId = 139) + COUNTIF(RouteId = 148) AS BUS_1
    FROM project.dataset.view
    GROUP BY DEP_DATE
 ) T2
     ON T1.DEP_DATE = T2.DEP_DATE

 WHERE
 DepartureDate > 
 DATETIME_TRUNC(DATETIME_SUB(CURRENT_DATETIME("America/Lima"), INTERVAL 3 
 DAY),DAY) 

 GROUP BY
 T1.DEP_DATE, T2.BUS_1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...