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

Google BigQuery是否支持投影操作?Legacy SQL滚动平均查询咨询

Google BigQuery Legacy SQL中的投影操作与滚动平均值实现

当然可以在Google BigQuery的Legacy SQL中执行投影操作啦——你写的查询其实已经在做投影了,SELECT子句里指定返回的id、date、sales以及计算出的projected_sale列就是投影的典型应用,投影本质就是从数据表中选择需要返回的字段或计算结果嘛。

接下来聊聊你写的滚动平均值查询,结合你提供的tableA数据,我们可以拆解下逻辑和结果:

你的查询逻辑

SELECT id, date, sales, AVG(sales) OVER (PARTITION BY id ORDER BY date RANGE BETWEEN 4 PRECEDING AND 1 PRECEDING) AS projected_sale FROM tableA
  • PARTITION BY id:按id分组计算,确保每个id的滚动平均值独立计算
  • ORDER BY date:按日期排序,保证窗口内的数据是按时间顺序排列的
  • RANGE BETWEEN 4 PRECEDING AND 1 PRECEDING:指定窗口范围是当前日期的前4天到前1天(不过这里有个小细节需要注意,后面会提到)

结合示例数据的计算结果

根据你提供的tableA数据,执行该查询后会得到如下结果:

iddatesalesprojected_sale
101-01-175NULL
101-02-1765.0
101-03-1775.5
101-04-17106.0

关于窗口范围的小修正

你提到要计算“过去3天(不包含当日)”的滚动平均值,当前的RANGE BETWEEN 4 PRECEDING AND 1 PRECEDING在你的示例数据里刚好得到3天的数据(因为没有更早的记录),但如果数据表中有更早的日期,这个范围会包含前4天的数据。更精确的写法应该是:

SELECT id, date, sales, AVG(sales) OVER (PARTITION BY id ORDER BY date RANGE BETWEEN 3 PRECEDING AND 1 PRECEDING) AS projected_sale FROM tableA

这样就能严格限定为当前日期的前3天到前1天,刚好覆盖过去3天(不含当日)的范围。

另外要注意:确保你的date字段是DATE类型,如果是字符串类型,RANGE的计算会基于字符串的排序规则,可能导致范围判断错误,建议先将字符串日期转换为DATE类型(比如用PARSE_DATE('%d-%m-%y', date))。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:50:42