基于另一列条件实现Google BigQuery行值更新的SQL方案
在Google BigQuery中实现指定的New_String生成逻辑
根据你给出的示例和需求,核心逻辑是:按日期从晚到早排序后,同一Condition组里的所有行,都取组内最新(日期最晚)那行的String值;如果组里只有一行,就取自身的String。
直接用LEAD()/LAG()可能会因为组内行数不确定导致逻辑复杂,这里用窗口函数FIRST_VALUE()更直接,适合BigQuery环境。假设你的表名为your_table,SQL代码如下:
SELECT Date, People, Condition, String, FIRST_VALUE(String) OVER ( PARTITION BY Condition ORDER BY Date DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) AS New_String FROM your_table ORDER BY Date DESC;
代码说明:
PARTITION BY Condition:把数据按Condition分组,相同Condition的行归为一个分区。ORDER BY Date DESC:每个分区内按日期降序排列,保证最新的行排在分区最前面。FIRST_VALUE(String):提取分区内排序后的第一行String,作为该分区所有行的New_String。ROWS BETWEEN ...:确保窗口包含分区内所有行,避免默认窗口范围(仅从分区开头到当前行)的限制。
运行这段代码后,输出结果会完全匹配你给出的示例:比如Condition=b的两行,New_String都是最新行的link 2;Condition=e的三行,New_String都是最新行的link6。
内容的提问来源于stack exchange,提问作者Joaquin Rojas
相关产品推荐
相关产品推荐

