我正在使用以下选择代码来确定每月的新客户。
第1步:
select ROW_NUMBER() over(order by so.ClientID desc) as ID, *
into #t1
from(
select so.ClientID, so.Product, so.StatementID, CONCAT(ClientID, CustomerGroup, Product) AS Code
from RG_SalesOut_Report so inner join Reporting.dbo.BrandNameForNCR br
on br.BrandName=so.Brand
where so.Block=0 AND so.[All Sources]='SalesOUT' AND so.Value_CP>0 AND so.Amount>0
group by so.ClientID, so.Product, so.StatementID, CONCAT(ClientID, CustomerGroup, Product)
) so
order by so.ClientID desc, so.Product, so.StatementID desc
Spet 2:
select distinct tab1.ClientID as NewClientID, tab1.StatementID as MonthSales
from #t1 tab1
RIGHT JOIN #t1 tab2
on tab1.ID=tab2.ID-1
where IIF(tab1.code=tab2.code, DATEDIFF(MONTH,tab2.StatementID, tab1.StatementID), 0)=0
我得到了以下结果:
我想得到以下结果:
从此表中我们可以看到,在 1月10日,我们有 5位新客户 ,并且在 2月10日< / strong> - 1位新客户 等等
如何确定每月新客户的数量? 提前致谢
答案 0 :(得分:1)
您可以通过两个步骤获得所需的结果:
将步骤2的结果存储在另一个临时表中,例如#tmp2。但是,我宁愿使用公用表表达式(CTE)来执行步骤1和2,而不是创建临时表。
注意:如果结果集很小,CTE会更好,但对于大型结果集,临时表会更好。
按客户分组并选择与每位客户对应的最短日期,然后按日期排序,如下:
select newclientid, min(monthsales) as 'monthsales'
from #tmp2
group by newclientid
order by monthsales