计数不同的每月 运行 总数

Count distinct monthly running total

我正在尝试找到一个 SQL 查询来解决每月查找 运行 不同客户的唯一计数的问题。

这不是每个月不同客户的数量,而是每个月新增加的唯一客户总数。

例如,1 月份我有 10 个唯一身份客户,2 月份我有另外 10 个客户,但其中 5 个在 2 月份进行过交易的客户是回头客,并且在 1 月份也进行过交易;所以在 1 月和 2 月之间,我实际上只有 运行 总共 15 个不同的客户(1 月 10 个,2 月 5 个)。

实现一年中每个月的 运行 个唯一客户数的最简单解决方案是什么?

示例输出,其中(与 1 月相比)2 月有 5 个额外的唯一客户,3 月有 10 个额外的唯一客户

这可能会:

Select 
   month, 
   count(*) as custs, 
   (select 
        count(distinct cust_id)
    from mytable b 
    where b.month<=a.month) as RunningUniqueCusts 
From mytable a
group by month

或针对月份和地区

Select 
   month, 
   region,
   count(*) as custs, 
   (select 
        count(distinct cust_id)
    from mytable b 
    where b.month<=a.month 
     and b.region=a.region) as RunningUniqueCustsForRegion
From mytable a
group by month, region

2022 年 3 月 3 日更新 以下将 return 之前未出现的每个月的唯一客户 ID:

SELECT TM.MONTH_ID, TM.CUST_ID 
FROM MYTABLE as TM 
WHERE NOT EXISTS 
     (SELECT 1
      FROM MYTABLE as PM 
      WHERE PM.CUST_ID = TM.CUST_ID
      and PM.MONTH < TM.MONTH)
GROUP BY TM.MONTH_ID, TM.CUST_ID
ORDER BY TM.MONTH_ID, TM.CUST_ID