Как рассчитать время между двумя событиями в Bigquery? - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть таблица со следующей схемой.

   Date          Time          Event_Type
2018-02-12    02:32:00 AM     Session_Start
2018-02-12    03:15:00 AM        event
2018-02-12    04:05:00 AM     Session_Start
2018-02-12    10:10:00 AM        event
2018-02-12    10:15:00 AM        event
2018-02-12    10:25:00 AM        event
2018-02-13    02:32:00 PM     Session_Start
2018-02-13    03:15:00 PM        event
2018-02-13    04:05:00 AM     Session_Start

Я хочу рассчитать время, которое пользователь проводит во время определенного сеанса.Таким образом, продолжительность сеанса находится между Session_start и последним событием перед следующим Session_Start.

Я думал о том, чтобы поместить Session_Start в группу, используя следующую команду:

WITH grps AS (
  SELECT Date, Time, Event_Type, 
    COUNTIF(Event_Type = 'Session_Start') OVER(PARTITION BY Date ORDER BY Time) grp
  FROM `project.events`
)

Но это кажется бесполезнымесли я не найду способ добраться до события до session_start.У кого-нибудь есть идеи, что можно сделать в этом случае?

1 Ответ

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

Я думаю, вы на правильном пути.Тогда вы хотите агрегации.Если бы ваша дата / время были в одном столбце datetime, вы бы сделали:

WITH grps AS (
      SELECT datetime, Event_Type, 
             COUNTIF(Event_Type = 'Session_Start') OVER (ORDER BY datetime) as grp
      FROM `project.events`
     )
SELECT min(datetime), max(datetime),
       datetime_diff(min(datetime), max(datetime), second) as seconds_diff
FROM grps
GROUP BY grp;

Если ваши значения даты / времени являются строками, вы можете сделать:

WITH grps AS (
      SELECT parse_datetime('%Y-%m-%d %I:%M:%S %p', concat(date, ' ', time) ) as datetime, Event_Type, 
             COUNTIF(Event_Type = 'Session_Start') OVER (ORDER BY datetime) as grp
      FROM `project.events`
     )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...