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

不使用LEAD/LAG函数统计点击流用户会话起止时间的SQL实现

无LEAD/LAG实现同会话连续用户时段统计SQL方案

核心思路

不用窗口偏移函数也能实现连续用户分组,核心是通过双行号的差值标记连续组:

  • 先给同个session里的所有记录按访问时间排序,生成全局流水号
  • 再给同个session、同一个user的记录按访问时间排序,生成用户维度的流水号
  • 如果用户没有切换,两个流水号会同步加1,差值固定不变;一旦切换用户,全局流水号加1,但用户流水号要么重置要么跳号,差值就会变化,所以差值相同的同用户记录就是同一个连续访问段

实现代码

WITH dual_rn AS (
    SELECT
        session_id,
        TRIM(user_id) AS user_id, -- 样例输入user_id带空格可加该步骤清理
        session_time,
        ROW_NUMBER() OVER(PARTITION BY session_id ORDER BY session_time) AS rn_global,
        ROW_NUMBER() OVER(PARTITION BY session_id, user_id ORDER BY session_time) AS rn_user
    FROM session_detail -- 替换为实际表名
),
continuous_group AS (
    SELECT
        *,
        rn_global - rn_user AS group_flag
    FROM dual_rn
)
SELECT
    session_id,
    user_id,
    MIN(session_time) AS session_start_time,
    MAX(session_time) AS session_end_time
FROM continuous_group
GROUP BY session_id, user_id, group_flag
ORDER BY session_start_time;

验证说明

代入提供的样例数据执行后,输出结果和期望格式完全一致:前四条u1记录差值固定为0归为一组,中间四条u2记录差值固定为4归为一组,最后四条u1记录差值固定为4,因为user_id不同分组时自动拆分,最终得到三段连续访问记录。

内容的提问来源于stack exchange,提问作者Prashant Srivastav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:24:06