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

如何在BigQuery中实现指定日期范围的N天窗口Lookahead逻辑?

在BigQuery中实现3天前瞻(Lookahead)逻辑

刚好处理过类似的需求,给你整理了一个完全匹配你预期输出的BigQuery实现方案,核心用自关联的方式来匹配每个处理日期之后3天的ID记录:

完整可运行SQL代码

WITH temp AS (
 SELECT DATE("2019-01-02") AS time_stamp, "3" AS id
 UNION ALL
 SELECT DATE("2019-01-03") AS time_stamp, "6" AS id
 UNION ALL
 SELECT DATE("2019-01-04") AS time_stamp, "5" AS id
 UNION ALL
 SELECT DATE("2019-01-05") AS time_stamp, "11" AS id
),
-- 定义需要处理的日期范围,这里对应你要求的2019-01-02至2019-01-03
processed_dates AS (
 SELECT DATE("2019-01-02") AS processed_date
 UNION ALL
 SELECT DATE("2019-01-03") AS processed_date
)
SELECT 
 pd.processed_date,
 t.id
FROM processed_dates pd
JOIN temp t
-- 匹配处理日期之后1到3天的记录,刚好覆盖"之后3天"的范围
ON t.time_stamp BETWEEN DATE_ADD(pd.processed_date, INTERVAL 1 DAY) 
                    AND DATE_ADD(pd.processed_date, INTERVAL 3 DAY)
ORDER BY pd.processed_date, t.time_stamp;

代码逻辑说明

  • processed_dates CTE:专门用来定义你要处理的日期区间,如果需要动态处理所有存在的日期(比如temp表中所有time_stamp都作为processed_date),可以把这段改成:
    processed_dates AS (
     SELECT DISTINCT time_stamp AS processed_date FROM temp
    )
    
  • 关联条件:通过DATE_ADD函数计算出处理日期的后1天到后3天的范围,确保只获取这个区间内的ID,完全符合你说的"前瞻3天"要求。
  • 排序:最后按处理日期和时间戳排序,让结果和你期望的格式完全一致。

运行后输出结果

执行这段SQL后,会得到你想要的输出:

processed_date, id
2019-01-02, 6
2019-01-02, 5
2019-01-02, 11
2019-01-03, 5
2019-01-03, 11

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:24:11