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

BigQuery中按月份实现累计去重客户数的方法咨询

BigQuery 累计唯一客户数实现方案

要实现截至每个月的累计唯一客户数,单纯用GROUP BY无法完成——GROUP BY只能计算单组内的聚合结果,无法跨组实现累计统计。不需要在BASE表新增列,以下两种方法可直接实现需求:

方法一:窗口函数直接计算(写法简单,小数据量适用)

利用窗口函数的COUNT(DISTINCT),按月份排序后累计统计从最早月份到当前月的所有唯一客户:

SELECT
  MONTH,
  COUNT(DISTINCT ID_CLIENT) OVER (
    ORDER BY MONTH
    ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
  ) AS cumulative_unique_clients
FROM BASE
GROUP BY MONTH
ORDER BY MONTH;

注意:大数据量下,窗口函数中的COUNT(DISTINCT)性能可能较差,推荐用方法二。

方法二:基于首次出现月份的累计求和(高性能,大数据量推荐)

先统计每个客户首次出现的月份,再对每个月累计之前所有月份的新客户数,总和即为累计唯一客户数:

WITH client_first_month AS (
  -- 找出每个客户第一次出现的月份
  SELECT
    ID_CLIENT,
    MIN(MONTH) AS first_seen_month
  FROM BASE
  GROUP BY ID_CLIENT
),
all_months AS (
  -- 提取BASE表中所有存在的月份
  SELECT DISTINCT MONTH FROM BASE
)
SELECT
  am.MONTH,
  -- 累计求和:统计截至当前月所有首次出现的客户总数
  SUM(COUNT(cfm.ID_CLIENT)) OVER (ORDER BY am.MONTH) AS cumulative_unique_clients
FROM all_months am
LEFT JOIN client_first_month cfm
ON am.MONTH = cfm.first_seen_month
GROUP BY am.MONTH
ORDER BY am.MONTH;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 15:22:03