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

如何高效计算滚动时间窗口内的事件最大发生次数?

问题背景

现有一张事件表,结构如下:

TypeIncident IDDate of incident
A12022-02-12
A22022-02-14
A32022-02-14
A42022-02-14
A52022-02-16
A62022-02-17
A72022-02-19
A82022-02-19
A72022-02-19
A82022-02-19
.........
B12022-02-12
B22022-02-12
B32022-02-13
.........

该表记录不同类型的事件,每条事件包含Type(类型)、Incident ID(事件ID)和Date of incident(事件发生日期)。

需求说明

针对给定的时间范围(如5天),计算滚动窗口内事件发生次数的最大值。示例:

  • 第一个窗口2022-02-12至2022-02-17内事件发生次数为6;
  • 窗口滚动一天后,2022-02-13至2022-02-18内事件发生次数为5,此时最大值仍为6;
  • 需要遍历完整时间范围得出最终最大值。
核心问题

如何在百万级数据量下高效实现该需求?具体而言,创建固定时长的滚动日期窗口,统计每个窗口内的事件发生次数,并输出所有窗口中的最大值。

当前使用SQLAlchemy,同时关注Plain SQL实现方案,也考虑是否可通过Pandas实现滚动窗口计算。

测试数据集
test_data_small = {'Id': [1, 2, 3, 4, 5,
                          6, 7, 8, 9, 10,
                          0, 1, 2, 3],
                   'Type': ['A', 'A', 'A', 'A',
                            'A', 'A', 'A', 'A',
                            'A', 'A', 'B', 'B',
                            'B', 'B'],
                   'Date': [
                       '2022-02-12', '2022-02-14',
                       '2022-02-14', '2022-02-14',
                       '2022-02-16', '2022-02-17',
                       '2022-02-19', '2022-02-19',
                       '2022-02-19', '2022-02-19',
                       '2022-02-16', '2022-02-12',
                       '2022-02-12', '2022-02-13']
                   }
现有SQLAlchemy代码
incidents = select(
            incidents.c.type,
            incidents.c.id,
            incidents.c.date
        ).subquery()

result = self.connection.execute(incidents).fetchall()
提问

是否可通过Plain SQL实现?或是否应使用Pandas进行滚动窗口计算?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 14:35:37