【发布时间】:2013-06-28 15:30:44
【问题描述】:
我一直在努力,但我认为我做得不对。 |D
我们的数据库无法跟踪我们保留了多少客户,因此我们寻找了一种替代方法。它概述了in this article。它建议您填写此表:
Year Number of Customers Number of customers Retained in 2009 Percent (%) Retained in 2009 Number of customers Retained in 2010 Percent (%) Retained in 2010 ....
2008
2009
2010
2011
2012
Total
表格将在标题中显示为 2012 年。我只是在节省空间。
它告诉您查找您在开始年度拥有的客户总数。为此,我使用了这个查询,因为我们的起始年份是 2008 年:
select YEAR(OrderDate) as 'Year', COUNT(distinct(billemail)) as Customers
from dbo.tblOrder
where OrderDate >= '2008-01-01' and OrderDate <= '2008-12-31'
group by YEAR(OrderDate)
目前我们只是通过电子邮件地址来区分我们的客户。
然后您必须搜索在以后几年(我们是 2009 年、10 年、11 年和 12 年)再次购买的同名客户。
我想出了这个。它应该会找到在 2008 年和 2009 年购买的人。
SELECT YEAR(OrderDate) as 'Year',COUNT(distinct(billemail)) as Customers
FROM dbo.tblOrder o with (nolock)
WHERE o.BillEmail IN (SELECT DISTINCT o1.BillEmail
FROM dbo.tblOrder o1 with (nolock)
WHERE o1.OrderDate BETWEEN '2008-1-1' AND '2009-1-1')
AND o.BillEmail IN (SELECT DISTINCT o2.BillEmail
FROM dbo.tblOrder o2 with (nolock)
WHERE o2.OrderDate BETWEEN '2009-1-1' AND '2010-1-1')
--AND o.OrderDate BETWEEN '2008-1-1' AND '2013-1-1'
AND o.BillEmail NOT LIKE '%@halloweencostumes.com'
AND o.BillEmail NOT LIKE ''
GROUP BY YEAR(OrderDate)
所以我只是找到在这两年购买的客户。然后我做一个独立的查询来查找那些在 2008 年和 2010 年购买的人,然后是 08 和 11 年,然后是 08 和 12 年。这个找到了 2008 年和 2010 年的购买者:
SELECT YEAR(OrderDate) as 'Year',COUNT(distinct(billemail)) as Customers
FROM dbo.tblOrder o with (nolock)
WHERE o.BillEmail IN (SELECT DISTINCT o1.BillEmail
FROM dbo.tblOrder o1 with (nolock)
WHERE o1.OrderDate BETWEEN '2008-1-1' AND '2009-1-1')
AND o.BillEmail IN (SELECT DISTINCT o2.BillEmail
FROM dbo.tblOrder o2 with (nolock)
WHERE o2.OrderDate BETWEEN '2010-1-1' AND '2011-1-1')
--AND o.OrderDate BETWEEN '2008-1-1' AND '2013-1-1'
AND o.BillEmail NOT LIKE '%@halloweencostumes.com'
AND o.BillEmail NOT LIKE ''
GROUP BY YEAR(OrderDate)
所以你看我对每年的比较都有不同的查询。他们都是无关的。所以最后我只是找到在 2008 年和 2009 年购买的人,然后是在 2008 年和 2010 年购买的可能不同的群体,依此类推。为了准确起见,我是否每次都必须使用相同的 2008 年买家分组?所以他们在 2009 年和 2010 年和 2011 年和 2012 年购买了?
这就是我担心的地方,不知道如何继续甚至找到此类数据。
任何建议将不胜感激!谢谢!
【问题讨论】:
-
如果存在差距,您如何考虑留存率,例如 2008 年 12 月 28 日订购的人 - 然后在 2009 年什么都没有,但在 2010 年 1 月 2 日再次订购。您希望这些数字代表什么在保留日志中。
标签: sql sql-server sql-server-2008