BigQuery SQL问题:基于时间范围求字段最大值
解决方案
问题1:按start_time找后续15秒的最大速度
直接关联表a和表b,限定b的时间落在a.start_time到a.start_time + 15的窗口内,然后按表a的start_time分组计算最大值:
SELECT a.start_time, MAX(b.velocity) AS max_velocity_next_15s FROM a LEFT JOIN b ON b.timestamp BETWEEN a.start_time AND a.start_time + 15 GROUP BY a.start_time;
若某个start_time的15秒窗口内无表b数据,MAX(b.velocity)会返回NULL,符合左连接的预期。
问题2:按时间区间找最大速度
关联表a和表b,限定b的时间在a.start_time到a.end_time区间内,按表a的start_time和end_time分组计算最大值:
SELECT a.start_time, a.end_time, MAX(b.velocity) AS max_velocity_in_interval FROM a LEFT JOIN b ON b.timestamp BETWEEN a.start_time AND a.end_time GROUP BY a.start_time, a.end_time;
针对你的测试数据,第一条区间包含表b的两个数据,最大速度为1.683;第二条区间无匹配数据,结果会返回NULL。
原代码问题分析
你原代码的核心错误:
- 按
b.timestamp分组,这会把每个b的时间点单独分组,而非按表a的每一行分组 - 关联条件
max_vel.timestamp = a.start_time逻辑错误,表b的时间戳不一定等于表a的start_time,导致匹配完全偏离需求
内容的提问来源于stack exchange,提问作者xyzjayne
相关产品推荐
相关产品推荐

