小编典典

每月统计新客户

sql

由于某种原因,我对此感到困惑。

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

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

我知道“新客户”是:(a)在日期/月份 之前 从未下过订单的人,以及(b)在日期/月份 之后 至少下过一次订单的人

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

      01   02   03   04   05   06   07   08   09   10   11   12
2010  ##   ##   ##   ##   ##   ##   ##   ##   ##   ##   ##   ##
2011  ##   ##   ##   ##   ##   ##   ##   ##   ##   ##   ##   ##
2012  ##   ##   ##   ##   ##   ##   ##   ##   ##   ##   ##   ##

我得到了这份工作,但是,伙计们,我不是一个程序员,这对你们中的某些人可能看起来很简单,但它已经超出了我的脑袋,根本没有引起我的兴趣。

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

我知道这也不是有效的SQL。所以我不知道该怎么办。而且我认为这只是提取适用客户的列表(意味着在输入月份之前未下订单的客户),而不是像我最终想要的那样对它们进行总计和总计。


阅读 162

收藏
2021-03-23

共1个答案

小编典典

尝试:

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

SQLFiddle在这里

2021-03-23