每月列出新客户

时间:2013-06-24 21:19:44

标签: sql sql-server sql-server-2008

这是a previous question的第二部分,我问过并已经得到答案。

在那里,我每年都希望每个月都有新客户。现在我想通过电子邮件地址实际看到一个新的列表(但是我真的不理解回答这个问题的代码,所以我仍然对自己这样做而感到迷茫,更重要的是,确认它是正确的)。

理想情况下,结果只是一列电子邮件地址。例如:

2011年6月的新客户

Month
email1@abc.com
email2@def.net
email3@ghi.edu

如果它不是太复杂,那么按月将它们分组也是有效的。含义...

2011年的新客户

Jan      Feb      Mar
email1   email4   email7
email2   email5   email8
email3   email6   email9

......等等。我可能几乎更喜欢简单的一次只显示一个月,但为了能够尝试和理解,哈哈。

标准非常简单:

  • 2011年6月首次订购的所有客户名单。
  • 从我的第一个问题:我知道“新客户”被定义为(a)某人从未在2011年6月1日之前订购和(b)至少 2011年6月1日之后的一个订单。

我的表名为 tblOrders 。 我的电子邮件名为电子邮件。 日期为 OrderDate

请注意,更简单的代码对我来说更容易理解,除非在这里不可能保持简单。这个查询对我来说似乎很简单......我得到了逻辑,但不是如何实际做到这一点! :(

如果您需要任何其他信息,请询问!谢谢!

编辑:如果有帮助的话,我之前会得到这个虚假代码,但它超出了我的范围。 /哑

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

4 个答案:

答案 0 :(得分:1)

SELECT MIN(OrderDate) AS MOD FROM dbo.tblOrders;

为您提供表格中最精美的OrderDate。

SELECT Email, MIN(OrderDate) AS MOD 
FROM dbo.tblOrders
GROUP BY Email;

为您提供每个唯一电子邮件地址的第一个订单日期。

SELECT Email, MIN(OrderDate) AS MOD 
FROM dbo.tblOrders
GROUP BY Email
HAVING MIN(OrderDate) >= '20110601' AND MIN(OrderDate) < '20110701';

为您提供所需客户的电子邮件以及他们的第一个OrderDate。

要达到第二个要求,您只需删除<子句的HAVING部分:

SELECT Email, MIN(OrderDate) AS MOD 
FROM dbo.tblOrders
GROUP BY Email
HAVING MIN(OrderDate) >= '20110601';

这将为您提供在2011-06-01之前或之后订购的所有客户,但不是之前订购。

答案 1 :(得分:0)

以下查询为您提供每位客户的第一个订单日期:

select email, min(orderdate) as FirstOrderDate
from orders o
group by email;

按月计算新客户数量:

select year(FirstOrderDate) as yr, month(FirstOrderDate) as mon, count(*)
from (select email, min(orderdate) as FirstOrderDate
      from orders o
      group by email
     ) oc
group by year(FirstOrderDate), month(FirstOrderDate);

为了获得特定月份的客户:

select email
from (select email, min(orderdate) as FirstOrderDate
      from orders o
      group by email
     ) oc
where FirstOrderDate >= '2013-01-01' and
      FirstOrderDate < '2013-02-01'

将它们并入列表(多列)可能不值得付出努力。

答案 2 :(得分:0)

这里..目前的几个月

 SELECT COUNT(ID) as permnt
    FROM tbl_CustomerDetails 
    where datepart(month,CreatedDate)= datepart(month,GETDATE())

答案 3 :(得分:0)

这里是当月工作良好的情况。.Sql

选择COUNT(ID)作为新的月份 来自dbo.tblOrders 按ID分组 具有MIN(OrderDate)> = DATE_FORMAT(Sysdate(),'%​​Y-%m-01')和MIN(OrderDate)