如何在BigQuery中规避重复记录,执行基于最新时间的求和聚合
BigQuery 去重聚合(取每个ID最新记录后求和)
要实现每个ID只取最新operation_time对应的记录,再对这些记录求和,用BigQuery的窗口函数就能搞定,给你两种实用写法:
方法一:子查询+ROW_NUMBER()
先给每个ID的记录按时间倒序编号,只保留编号为1的最新记录,再求和:
WITH latest_records AS ( SELECT id, your_sum_column, -- 替换成你实际要累加的列名 operation_time, ROW_NUMBER() OVER(PARTITION BY id ORDER BY operation_time DESC) AS rn FROM your_table -- 替换成你的数据表名 ) SELECT SUM(your_sum_column) AS total_sum FROM latest_records WHERE rn = 1;
方法二:QUALIFY子句(更简洁)
BigQuery支持QUALIFY直接筛选窗口函数结果,省去子查询嵌套:
SELECT SUM(your_sum_column) AS total_sum FROM ( SELECT id, your_sum_column, operation_time FROM your_table QUALIFY ROW_NUMBER() OVER(PARTITION BY id ORDER BY operation_time DESC) = 1 );
关键逻辑说明
PARTITION BY id:按ID分组,确保每个ID的记录单独处理ORDER BY operation_time DESC:把每个ID的记录按时间从新到旧排序ROW_NUMBER():给每个ID组内的记录编序号,最新的那条序号为1,筛选后就得到每个ID的唯一最新记录,再求和就不会重复累加了
内容的提问来源于stack exchange,提问作者jake_jj
相关产品推荐
相关产品推荐

