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

基于Google BigQuery的customer_table去重:获取最新实例记录的SQL方案

在BigQuery中获取每个customer_id的最新记录

核心解决方案

如果你的表没有明确的时间戳字段,我们可以通过窗口函数标记每个customer_id的最后出现记录;如果有时间字段(比如update_time),直接用时间字段排序更准确。

情况1:表无时间戳字段(按记录在表中的最后出现顺序判断“最新”)

WITH ranked_customers AS (
  SELECT
    customer_id,
    name,
    ROW_NUMBER() OVER (
      PARTITION BY customer_id 
      ORDER BY (SELECT NULL) DESC -- 按记录存储的倒序取最后一条,若有其他可表示顺序的字段可替换此处
    ) AS row_num
  FROM `customer_data.customer_table`
)
SELECT customer_id, name
FROM ranked_customers
WHERE row_num = 1;

情况2:表有时间戳字段(比如update_time,推荐用这个判断“最新”)

WITH ranked_customers AS (
  SELECT
    customer_id,
    name,
    ROW_NUMBER() OVER (
      PARTITION BY customer_id 
      ORDER BY update_time DESC -- 按更新时间倒序,取最新的一条记录
    ) AS row_num
  FROM `customer_data.customer_table`
)
SELECT customer_id, name
FROM ranked_customers
WHERE row_num = 1;

你之前方法仅返回4行的可能原因

  • 错误使用GROUP BY customer_id搭配聚合函数(比如MAX(name)):这种方式只会返回字符串排序最大的name,若GROUP BY语句存在语法逻辑错误,还会意外过滤大量数据。
  • 排序字段选择错误:比如你之前用ORDER BY customer_id作为窗口函数的排序规则,由于customer_id本身是重复值,无法区分记录的新旧,甚至会导致部分分组的记录被错误过滤。

结果验证

执行上述SQL后,会为每个唯一的customer_id保留一条最新记录,最终返回24行(对应24个唯一的customer_id)。

内容的提问来源于stack exchange,提问作者Richard Liu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 12:30:56