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

SparkSQL动态时间窗口计算:统计参与者事件后3天内其他事件数

需求:统计参与者事件后未来3天内的其他事件数量

数据样本

参与者(performer)事件(event)事件时间(event_time)
Aevent_a2022-07-21
Cevent_b2022-07-20
Bevent_c2022-07-18
Cevent_d2022-07-11
Aevent_e2022-07-12
Bevent_f2022-07-11
Bevent_g2022-07-15
Bevent_h2022-07-14
Bevent_i2022-07-13

期望结果

参与者(performer)事件(event)事件时间(event_time)未来3天内其他事件数(count_other_event_in_NEXT_3_days)
Aevent_a2022-07-210
Cevent_b2022-07-200
Bevent_c2022-07-180
Cevent_d2022-07-110
Aevent_e2022-07-120
Bevent_f2022-07-112
Bevent_g2022-07-151
Bevent_h2022-07-141
Bevent_i2022-07-132

现有代码(统计过去3天事件数)

以下SparkSQL代码可实现过去3天的统计需求:

-- 这段SparkSQL用于统计过去3天的事件数量
select performer,
    event,
    event_time,
    count(event) 
         over(partition by performer
              order by cast(event_time as timestamp)
              range between interval 3 days preceding and current row
         ) as cnt
from table

解决方案(统计未来3天内的其他事件数)

要实现统计每位参与者在某一事件后的未来3天内其他事件数量,可以调整窗口函数的范围为当前行到未来3天,并减去当前事件本身的计数:

select 
    performer,
    event,
    event_time,
    -- 统计当前事件及未来3天内的所有事件数,减去1得到其他事件的数量
    (count(event) over(
        partition by performer
        order by cast(event_time as timestamp)
        range between current row and interval 3 days following
    ) - 1) as count_other_event_in_NEXT_3_days
from table

逻辑说明

  1. 按performer分区,确保只统计同一参与者的事件
  2. 按event_time排序,确定事件的时间顺序
  3. 窗口范围设为current row到interval 3 days following,覆盖当前事件及未来3天内的所有事件
  4. 用总数减去1,排除当前事件本身,得到未来3天内其他事件的数量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 12:21:31