You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于BigQuery按ga_session_id计算Firebase用户会话时长

完善后的BigQuery会话时长统计SQL

针对你的需求,直接通过ga_session_id分组即可实现按会话统计时长,不需要额外的分组序号(grp字段)。以下是优化后的查询语句:

WITH session_events AS (
  SELECT 
    event_timestamp,
    event_name,
    -- 提取ga_session_id参数值
    (SELECT value.int_value FROM UNNEST(event_params) WHERE key = "ga_session_id") AS sessionid
  FROM `nodal-descent-XXXXX.analytics_XXXXXX.events_intraday_*`
)
SELECT
  sessionid,
  -- 取会话中session_start事件的时间戳作为会话开始时间
  MIN(CASE WHEN event_name = 'session_start' THEN event_timestamp END) AS session_start_ts,
  -- 取会话中最后一个事件的时间戳作为会话结束时间
  MAX(event_timestamp) AS session_end_ts,
  -- 计算会话时长(秒)
  TIMESTAMP_DIFF(
    TIMESTAMP_MICROS(MAX(event_timestamp)),
    TIMESTAMP_MICROS(MIN(CASE WHEN event_name = 'session_start' THEN event_timestamp END)),
    SECOND
  ) AS session_duration_seconds
FROM session_events
-- 按ga_session_id分组统计每个会话
GROUP BY sessionid
-- 过滤掉没有session_start的异常会话(可选)
HAVING session_start_ts IS NOT NULL

关键优化点说明:

  • 直接通过sessionid(即ga_session_id)分组,替代原查询中不必要的grp分组逻辑
  • 使用CASE WHEN精准定位每个会话的session_start事件时间戳,避免误取会话内其他事件的最早时间
  • 添加HAVING子句过滤异常会话(比如缺失session_start事件的会话,可根据实际需求选择保留或过滤)
  • 保留了原查询中TIMESTAMP_MICROS转换和TIMESTAMP_DIFF计算逻辑,确保时间单位转换正确

内容的提问来源于stack exchange,提问作者Daniel Aparicio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 08:18:34