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

如何编写SQL查询以统计连续发生的事件次数?

统计连续事件次数的SQL实现

假设你的事件表结构如下(以用户连续事件为例,可根据实际场景调整字段):

CREATE TABLE event_logs (
    user_id INT,
    event_date DATE,
    event_type VARCHAR(50) -- 可选,用于区分不同类型事件
);

核心实现逻辑

通过窗口函数计算日期与分组行号的差值,相同差值的行属于同一连续事件组,再对每组统计连续次数。

完整SQL查询语句

SELECT
    user_id,
    MIN(event_date) AS start_date,
    MAX(event_date) AS end_date,
    COUNT(*) AS consecutive_count -- 连续事件发生次数
FROM (
    SELECT
        user_id,
        event_date,
        -- 生成连续事件组的标识:连续日期减去递增行号后结果一致
        DATE_SUB(event_date, INTERVAL ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY event_date) DAY) AS group_flag
    FROM event_logs
    -- 可选:如果仅统计特定事件类型,添加WHERE条件
    -- WHERE event_type = 'target_event'
) AS grouped_events
GROUP BY user_id, group_flag
ORDER BY user_id, start_date;

关键说明

  • ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY event_date):按用户分组,对事件日期排序后生成递增行号。
  • DATE_SUB(...):连续的日期减去对应行号后,会得到相同的group_flag,以此识别连续事件区间。
  • 外层通过GROUP BY分组统计每组的起止日期和连续次数。

若你的事件时间粒度是小时/分钟,或需要按其他维度分组,只需调整日期函数和窗口函数的分区、排序字段即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 23:05:25