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

基于time_diffs字段条件实现SQL的row_number分组编号

实现基于time_diffs规则的分组编号逻辑

需求说明

  • 当time_diffs连续为1时,对应行归为同一组
  • 当time_diffs为0时,每行单独成为一组
  • 组编号随分组切换依次递增1

解决方案SQL

我们可以通过标记分组起始点+累计求和的方式实现需求,完整SQL如下:

WITH session_with_time_diff AS (
    select session_id, 
        player_id, 
        country, 
        start_time, 
        end_time,       
        case when timestampdiff(minute, 
                                lag(end_time, 1) over(partition by player_id order by end_time)
                               , start_time) < 5 then 1
             when timestampdiff(minute, end_time
                   , lead(start_time, 1) over(partition by player_id order by start_time)) < 5 then 1
        else 0
        end as time_diffs
    from game_sessions
    where player_id = 1
)
SELECT 
    *,
    SUM(group_start) OVER (PARTITION BY player_id ORDER BY start_time) AS expected_result
FROM (
    SELECT 
        *,
        CASE 
            -- 第一行直接作为新分组起始
            WHEN lag(time_diffs) OVER (PARTITION BY player_id ORDER BY start_time) IS NULL THEN 1
            -- 上一行不是连续1的情况,当前行开启新分组
            WHEN lag(time_diffs) OVER (PARTITION BY player_id ORDER BY start_time) != 1 THEN 1
            -- 当前行time_diffs为0,单独成组
            WHEN time_diffs = 0 THEN 1
            -- 其余情况属于当前分组,不触发新分组
            ELSE 0
        END AS group_start
    FROM session_with_time_diff
) t
ORDER BY player_id, start_time;

逻辑解释

  1. CTE预处理:保留原查询的time_diffs计算结果,简化后续逻辑
  2. 标记分组起始点:
    • 第一行无前置行,直接标记为新分组起始
    • 如果上一行的time_diffs不是1,说明当前行是新分组的开始
    • 只要当前行time_diffs为0,无论前置行状态,都单独成组
  3. 生成组编号:对标记的起始点做累计求和,得到连续递增的组编号,完全匹配需求规则

结果对比

原查询结果

session_idplayer_idcountrystart_timeend_timetime_diffs
11UK01.01.2021 00:0101.01.2021 00:101
21UK01.01.2021 00:1201.01.2021 01:241
131UK01.01.2021 01:2701.01.2021 01:501
31UK01.01.2021 10:0101.01.2021 15:100
161UK01.01.2021 17:1001.01.2021 17:201
171UK01.01.2021 17:2201.01.2021 17:551
541UK01.01.2021 18:1501.01.2021 18:350
321UK01.01.2021 18:5501.01.2021 19:350

修改后查询结果(符合期望)

session_idplayer_idcountrystart_timeend_timetime_diffsexpected_result
11UK01.01.2021 00:0101.01.2021 00:1011
21UK01.01.2021 00:1201.01.2021 01:2411
131UK01.01.2021 01:2701.01.2021 01:5011
31UK01.01.2021 10:0101.01.2021 15:1002
161UK01.01.2021 17:1001.01.2021 17:2013
171UK01.01.2021 17:2201.01.2021 17:5513
541UK01.01.2021 18:1501.01.2021 18:3504
321UK01.01.2021 18:5501.01.2021 19:3505

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 18:35:21