-2

我有一张这样的桌子:

    id | Customer  | date
-----------------------------------------
    1  | Customer2 | 2013-08-01 00:00:00
-----------------------------------------
    2  | Customer1 | 2013-07-15 00:00:00
-----------------------------------------
    3  | Customer1 | 2013-07-01 00:00:00
-----------------------------------------
    .  | ...       | ...
-----------------------------------------
    n  | CustomerN | 2012-03-01 00:00:00

我想计算每个月的“获得”客户、每个月的“流失”客户和每个月的净收益,即使在单独的表/视图中完成。

我怎样才能做到这一点?

编辑

好的,让我展示一下我到目前为止所做的事情。

要选择任何月份的已获得客户,我尝试从以下不存在的 Bookings 表中选择客户:

select Customer
from Bookings
where not exists
  (select Customer
   from Bookings
   where
     (Bookings.date BETWEEN
          DATE_FORMAT(DATE_SUB(Bookings.date, INTERVAL 1 MONTH), '%Y-%m-01 00:00:00')
          AND DATE_FORMAT(Bookings.date, '%Y-%m-01 00:00:00'
     )
) AND Bookings.date >= STR_TO_DATE('2010-11-01 00:00:00', '%Y-%m-%d 00:00:00'))

据推测,这会获得存在于“选定”月份但不存在于上一个月份的客户。“2010-11-01”是预订开始日期 + 1 个月。

要选择任何月份的 Lost customers,我尝试从 Bookings 表中选择以下不存在的客户:

select Customer
from Booking
where not exists
  (select Customer
   from Bookings
   where
     (Bookings.date BETWEEN
          DATE_FORMAT(Bookings.date, '%Y-%m-01 00:00:00')
          AND Bookings.date
     )
     AND Bookings.date >= STR_TO_DATE('2010-11-01 00:00:00', '%Y-%m-%d 00:00:00'
  )
)

据说这会获得上个月存在但不在“选定”客户中的客户。

对于“损失”SQL 查询,我得到了空结果!对于“增益”,我得到了数千行,但不确定这是否准确。

4

1 回答 1

0

您可以使用 COUNT DISTINCT 来计算您的客户,并使用 WHERE YEAR(Date) = [year] AND MONTH(Date) = [month] 来获取月份。

2013年9月客户总数:

SELECT COUNT(DISTINCT Customer) AS MonthTotalCustomers FROM table
WHERE YEAR(date) = 2013 AND MONTH(date) = 9

2013年9月获得的客户:

SELECT COUNT(DISTINCT Customer) AS MonthGainedCustomers FROM table
WHERE YEAR(date) = 2013 AND MONTH(date) = 9
AND Customer NOT IN 
    (SELECT Customer FROM table 
    WHERE date < '2013-09-01')

找出失去的客户更加困难。我需要知道您认为它们“丢失”的标准是什么。如果你的意思是他们在 2013 年 8 月就在附近,但在 2013 年 9 月不在:

SELECT COUNT(DISTINCT Customer) AS MonthLostCustomers FROM table
WHERE YEAR(date) = 2013 AND MONTH(date) = 8
AND Customer NOT IN 
    (SELECT Customer FROM table 
    WHERE YEAR(date) = 2013 AND MONTH(date) = 9)

我希望从这些示例中您可以推断出您要查找的内容。

于 2013-10-09T01:13:37.697 回答