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

如何在BigQuery中按ID分组计算每周事件平均间隔时间

编辑说明:我已更新示例以体现逻辑,此前示例仅用于展示数据结构。

现有如下数据:

id    timestamp

3     2022-10-01 12:45:47 UTC
3     2022-10-01 12:45:27 UTC
3     2022-10-01 12:45:17 UTC
1     2022-09-29 15:26:40 UTC
2     2022-09-29 13:15:38 UTC
1     2022-09-29 12:08:28 UTC
2     2022-09-26 16:17:15 UTC

(本质上,每个id在数月时间内的单日可包含大量时间戳。)

我希望计算每周内每两个时间戳之间的平均间隔时间,预期结果如下:

id   week          averageTimeSec

3    2022-09-26    15 (2022-10-01 12:45:27 - 2022-10-01 12:45:17 = 10秒, 2022-10-01 12:45:47 - 2022-10-01 12:45:27 = 20秒)

2    2022-09-26    248303 (2022-09-29T13:15:38Z - 2022-09-26T16:17:15Z = 248303秒)

1    2022-09-26    11892 (2022-09-29 15:26:40 - 2022-09-29 12:08:28 = 11892秒)

目的是查看长时间范围内事件的生成频率,例如:某ID两个月前平均每100秒生成一次事件,一个月前平均每50秒生成一次,以此类推。

我日常不使用BigQuery或SQL,遇到此类任务感到困惑。我能想到用InfluxDB的Flux实现的思路,但该知识无法迁移到BigQuery中……我已开始阅读BigQuery文档,但仍未找到合适的实现方法。若有人能指明方向,我将不胜感激。

我目前仅实现了如下内容(仅查看每周内各ID的平均事件数量,而非事件实际间隔时间):

SELECT week, AVG(connectionCount)
FROM (SELECT id,
             TIMESTAMP_TRUNC(timestamp, WEEK) week,
             COUNT(timestamp)                 connectionCount
      FROM `allEvents`

      GROUP BY id, week

      ORDER BY id, week)

GROUP BY week

ORDER BY week

解决方案

感谢Daryl Wenman Bateson提供的完整方案,以下是含测试数据的完整示例:

WITH testData AS (
  SELECT '3' as id, TIMESTAMP('2022-10-01 12:45:47 UTC') as timestamp UNION ALL
  SELECT '3', TIMESTAMP('2022-10-01 12:45:27 UTC') UNION ALL
  SELECT '3', TIMESTAMP('2022-10-01 12:45:17 UTC') UNION ALL
  SELECT '1', TIMESTAMP('2022-09-29 15:26:40 UTC') UNION ALL
  SELECT '2', TIMESTAMP('2022-09-29 13:15:38 UTC') UNION ALL
  SELECT '1', TIMESTAMP('2022-09-29 12:08:28 UTC') UNION ALL
  SELECT '2', TIMESTAMP('2022-09-26 16:17:15 UTC')
)

  SELECT
    id, 
    week,
    AVG(timeDifference) diff
  FROM 
    (
      SELECT  
        id, 
        timestamp,
        TIMESTAMP_TRUNC(timestamp, ISOWEEK) week, 
        UNIX_SECONDS(timestamp) - LAG(UNIX_SECONDS(timestamp)) OVER (PARTITION BY id ORDER BY timestamp) AS timeDifference 
      FROM
        testData
    ) 
  GROUP BY 
    id, 
    week
  
  ORDER BY
    diff

输出结果如下:
输出结果截图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 09:55:19