SQL技术求助:获取去重记录后如何追加LoadDateTime列?
解决方案
针对你需要保留业务列去重结果并追加LoadDateTime的需求,提供两种实用的BigQuery SQL写法:
方法一:用窗口函数获取指定排序的LoadDateTime(推荐)
这种方式可以灵活选择要保留的LoadDateTime(比如最新/最早的),同时确保业务列唯一:
WITH deduplicated_data AS ( SELECT *, -- 按业务列分组,按LoadDateTime倒序排,最新的记录标记为1 ROW_NUMBER() OVER ( PARTITION BY * EXCEPT (LoadDate, LoadDateTime, SourceFilename) ORDER BY LoadDateTime DESC ) AS row_num FROM a ) -- 筛选出每组第一条,保留业务列和LoadDateTime,去掉多余列 SELECT * EXCEPT (LoadDate, SourceFilename, row_num) FROM deduplicated_data WHERE row_num = 1;
如果需要最早的LoadDateTime,把ORDER BY LoadDateTime DESC改成ASC即可。
方法二:用聚合函数快速关联LoadDateTime
如果只需要对应业务组的任意一个LoadDateTime(比如最新/最早),可以直接用分组聚合:
SELECT * EXCEPT (LoadDate, LoadDateTime, SourceFilename), MAX(LoadDateTime) AS LoadDateTime -- 取最新的LoadDateTime,用MIN则取最早的 FROM a GROUP BY * EXCEPT (LoadDate, LoadDateTime, SourceFilename);
这两种写法都能得到业务列去重后的1条记录,同时带上你需要的LoadDateTime字段,解决之前重复数据的问题。
内容的提问来源于stack exchange,提问作者user23705977
相关产品推荐
相关产品推荐

