如何在BigQuery的Standard SQL中计算用户会话时长及平均会话时长
结论
基于你目前提供的chats表结构和示例数据,无法实现你所需的会话时长统计需求。
核心原因
你要求的会话时长计算逻辑为「同一会话中首个inbound_timestamp到最后一个outbound_timestamp的差值」,但现有数据没有任何字段可以判断哪些交互记录属于同一会话:
- 比如用户
217666666662021-03-09的三条交互记录,间隔分别为6小时、5小时,无法判定属于同一个会话还是三个独立会话 - 不同用户的交互记录也没有会话维度的标识做聚合
实现需求的补充前提
你只需要满足以下任意一个条件,即可完成统计:
- 表中新增
session_id字段:同一会话的所有交互记录共享同一个session_id,可直接按维度分组计算 - 明确会话超时规则:比如约定「用户两次消息交互间隔超过15分钟即判定为新会话」,可通过窗口函数先给每条记录打会话标识,再做后续统计
补充前提后的统计逻辑
先修正你描述里的笔误:会话时长应为最后一个outbound_timestamp减去首个inbound_timestamp,否则会得到负数结果。
每个用户每日平均会话时长
- 按
Owner、日期、session_id分组,计算每个会话的时长 - 再按
Owner、日期分组,对该分组下所有会话的时长取平均值即可
每日整体平均会话时长
- 按日期、
session_id分组,计算当日所有会话的总时长和总会话数 - 用总时长除以总会话数,得到当日整体平均会话时长
内容的提问来源于stack exchange,提问作者user2875230
相关产品推荐
相关产品推荐

