计数不同的每月 运行 总数
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
我正在尝试找到一个 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