计算每月新客户数

ash*_*ash 6 sql sql-server sql-server-2008

出于某种原因,我对此感到困惑.

基本上,我正在寻找一个查询,可以找到自2010年以来每月新客户的数量.

我有客户的电子邮件地址(电子邮件),所有下订单(OrderID),以及它所在的日期(OrderDate).该表是tblOrder.

我知道"新客户"是:(a)在日期/月之前从未订购的人和(b)在日期/月之后至少有一个订单的人

我希望输出最终是这样的,更简单的方法更好:

      01   02   03   04   05   06   07   08   09   10   11   12
2010  ##   ##   ##   ##   ##   ##   ##   ##   ##   ##   ##   ##
2011  ##   ##   ##   ##   ##   ##   ##   ##   ##   ##   ##   ##
2012  ##   ##   ##   ##   ##   ##   ##   ##   ##   ##   ##   ##
Run Code Online (Sandbox Code Playgroud)

我得到了这个,但是伙计们,我真的不是一个程序员,而且你们可能看起来很简单,但这些都超出了我的想法而根本没有点击我.

SELECT <customer info> 
FROM <customer table> 
WHERE (SELECT COUNT(<order info>) 
    FROM <order table> 
    WHERE <customer info> = <current customer> 
        AND <date> < <target date>) = 0 
        AND (SELECT COUNT(<order info> 
            FROM <order table> 
            WHERE <customer info> = <current customer> 
            AND <date> > <target date>) > 0
Run Code Online (Sandbox Code Playgroud)

我知道这也不是有效的SQL.所以我不知道该怎么做.而且我认为它只是提取了一个适用客户列表(意思是那些在输入的月份之前没有订购的客户),而不是将它们全部计算在内,并像我最终想要的那样累计它们.

小智 2

尝试:

select yr, [1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12]
from
(select datepart(month,minDate) mth, datepart(year,minDate) yr, count(*) cnt
 from (select min(OrderDate) minDate, max(OrderDate) maxDate
       from tblOrder
       group by email) sq
 where datediff(month, minDate, maxDate) > 0
 group by datepart(month,minDate), datepart(year,minDate)) src
PIVOT
(max(cnt) 
 for mth in ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12]) ) pvt
Run Code Online (Sandbox Code Playgroud)

SQLFiddle在这里