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

基于ROW_NUMBER分区规则更新BigQuery中snapshot_date字段的方法咨询

BigQuery 更新语句实现方案

UPDATE `XXX.YYY.TABLE` t
SET Snapshot_Date = DATE_SUB('2021-10-04', INTERVAL 1 DAY)
WHERE Snapshot_Date = '2021-10-04'
AND EXISTS (
  SELECT 1 FROM (
    SELECT 
      Period, User_Struct, Num_Active_Users,
      ROW_NUMBER() OVER(PARTITION BY Period, User_Struct ORDER BY Num_Active_Users ASC) rn 
    FROM `XXX.YYY.TABLE` 
    WHERE Snapshot_Date = '2021-10-04'
  ) sub
  WHERE sub.rn = 1
  AND sub.Period = t.Period
  AND sub.User_Struct = t.User_Struct
  AND sub.Num_Active_Users = t.Num_Active_Users
)

逻辑说明

  • 外层UPDATE指定目标表,通过DATE_SUB动态计算前一天日期赋值给Snapshot_Date,避免手动输入日期出错
  • 内层EXISTS子句复用你的筛选逻辑,通过Period、User_Struct、Num_Active_Users三个字段关联外层表行,仅匹配你筛选出的rn=1的待更新记录
  • 修正了你原有查询中窗口函数排序的不规范写法:ROW_NUMBER的排序规则需要声明在OVER子句内,才能保证行号计算逻辑稳定

注意事项

  • 执行更新前建议先替换为SELECT COUNT(*)语句验证匹配行数,和你原有查询返回的行数一致后再执行更新操作
  • 如果你的表存在唯一主键,可以将关联条件替换为主键匹配,避免字段值重复导致的误更新

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:06:04