BigQuery SQL:如何基于最大last_modified去除重复记录?
解决BigQuery保留最大last_modified记录的问题
你可以用BigQuery的QUALIFY子句来实现,不用依赖ROW_NUMBER()过滤,适合处理频繁出现的重复数据场景:
SELECT id, publishedat AS post_date, lastmodifiedat AS last_modified, extaction_timestamp AS extraction_date -- 这里放你需要的其他字段 FROM [你的表名或数据源] WHERE DATE(extaction_timestamp) = CURRENT_DATE() QUALIFY MAX(lastmodifiedat) OVER (PARTITION BY id) = lastmodifiedat
原理说明
PARTITION BY id:按id分组,把相同id的记录归为一组MAX(lastmodifiedat) OVER (...):计算每个id组内的最大lastmodifiedat值QUALIFY:直接过滤出当前行lastmodifiedat等于组内最大值的记录,自动保留每个id对应的最新那条
你之前的写法问题在于用DISTINCT搭配聚合函数但没加GROUP BY,逻辑混乱导致无法精准筛选。如果你的其他字段(比如publishedat)在同一id下完全一致,也可以用GROUP BY写法:
SELECT id, publishedat AS post_date, MAX(lastmodifiedat) AS last_modified, extaction_timestamp AS extraction_date -- 其他相同字段也要加到GROUP BY里 FROM [你的表名或数据源] WHERE DATE(extaction_timestamp) = CURRENT_DATE() GROUP BY id, publishedat, extaction_timestamp -- 所有非聚合字段都要分组
但QUALIFY的写法更灵活,哪怕后续其他字段出现差异,也能准确拿到对应最大lastmodifiedat的整行数据,更适配你源数据频繁重复的场景。
内容的提问来源于stack exchange,提问作者DataAnalytics_Rookie
相关产品推荐
相关产品推荐

