我正在计算过去3个月和6个月内活跃的客户数量。
SELECT COUNT (DISTINCT CustomerNo) FROM SalesDetail
WHERE InvoiceDate > (GETDATE() - 180) AND InvoiceDate < (GETDATE() - 90)
SELECT COUNT (DISTINCT CustomerNo) FROM SalesDetail
WHERE InvoiceDate > (GETDATE() - 90)
但是,根据上述查询,即使有重复,我也会得到过去3个月和最近6个月都处于活动状态的客户数。
我如何过滤客户,因此,如果客户A在过去3个月和6个月内都处于活动状态,则只会在“过去3个月内处于活动状态”查询中而不是在“也过去6个月。
我怀疑您要在此处进行条件聚合:
SELECT
CustomerNo,
COUNT(CASE WHEN InvoiceDate > GETDATE() - 90 THEN 1 END) AS cnt_last_3,
COUNT(CASE WHEN InvoiceDate > GETDATE() - 180 AND InvoiceDate < GETDATE() - 90
THEN 1 END) AS cnt_first_3
FROM yourTable
GROUP BY
CustomerNo;
这里cnt_last_3
是最近3个月的计数,cnt_first_3
是从6个月前开始到3个月前结束的3个月期间的计数。
如果您想要不重复计数,您可以像这样添加不重复
Select
count( Case when dt between getdate()- 90 and getdate() then id else null end) cnt_3_months
,count(distinct Case when dt between getdate() - 180 and getdate() - 90 then id else null end) cnt_6_months
from a