【问题标题】:How to Calculate Time between two events in Bigquery?如何计算 Bigquery 中两个事件之间的时间?
【发布时间】:2019-02-26 04:33:15
【问题描述】:

我有一个具有以下架构的表。

   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 之前参加活动的方法。有人知道在这种情况下可以做什么吗?

【问题讨论】:

    标签: sql google-bigquery


    【解决方案1】:

    我认为你是在正确的轨道上。然后你想要聚合。如果您的日期/时间在单个 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`
         )
    

    【讨论】:

    • 感谢您的回复。我在单列中添加了日期时间并尝试了第一个查询,但它给了我这个错误。 **对于参数类型的函数 DATETIME_DIFF 没有匹配的签名:TIMESTAMP、TIMESTAMP、DATE_TIME_PART。支持的签名:DATETIME_DIFF(DATETIME, DATETIME, DATE_TIME_PART) **
    • @vsr 。 . .如果您的列是时间戳,则使用timestamp_diff() 而不是datetime_diff()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 2016-09-18
    • 2022-06-01
    相关资源
    最近更新 更多