由于某种原因,我对此感到困惑。
基本上,我正在寻找一个查询,该查询将查找自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。所以我不知道该怎么办。而且我认为这只是提取适用客户的列表(意味着在输入月份之前未下订单的客户),而不是像我最终想要的那样对它们进行总计和总计。
尝试:
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在这里。