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

BigQuery中如何计算时间戳平均间隔并实现访问量滚动求和

解答

可以不嵌套CTE,直接在单条查询中实现连续会话平均时间差的计算。
你可以直接将计算相邻会话时间差的LAG()逻辑嵌套到AVG()窗口函数的参数中,无需先封装为子查询或CTE,参考写法如下:

SELECT 
    client_id, 
    visit_number, 
    SUM(hit_count) OVER (PARTITION BY client_id ORDER BY visit_number) AS cumulative_hit_count, 
    session_start_time - LAG(session_start_time) OVER (PARTITION by client_id ORDER BY visit_number) AS current_session_gap,
    -- 新增逻辑:计算同一用户下所有连续会话的平均时间差
    AVG(session_start_time - LAG(session_start_time) OVER (PARTITION by client_id ORDER BY visit_number)) 
        OVER (PARTITION BY client_id) AS avg_session_gap
FROM session_table

说明

  • 首次会话的LAG()返回结果为NULL,AVG()计算时会自动跳过NULL值,不会拉低平均结果,符合业务逻辑预期
  • 如果你需要计算全量所有用户的全局平均连续会话时间差,去掉AVG()窗口函数中的PARTITION BY client_id即可
  • 该写法支持所有主流支持窗口函数的数据库,包括PostgreSQL 11+、MySQL 8+、SQL Server 2012+、BigQuery等

内容的提问来源于stack exchange,提问作者Don Draper

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:45:01