2013-10-09 41 views
-2

我有一个表是这样的:MySQL的计算收益,亏损和净增益在一段时间

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 

我要计算的“虎子”客户每月的“失去“每个月的客户和每个月的净收益,即使在单独的表/视图中完成。

我该怎么做?

编辑

好吧,让我演示一下,我这样做的远。

要选择客户后获得了对任何一个月,我试图从登记表中选择的客户在以下不存在:

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个月。

要选择客户流失对于任何一个月,我试图从登记表中选择的客户在以下不存在:

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查询,我得到了空的结果!对于“增益”我得到了成千上万的行,但不知道这是否准确。

+1

那么,什么时候客户失去或获得了什么标准呢? – Mihai

+1

请定义_gain_和_loss_ – geomagas

回答

0

您可以使用COUNT DISTINCT来统计您的客户,并在WHERE YEAR(日期)= [year]和MONTH(日期)= [月]中获取月份。

客户的9月份2013年总数:

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) 

我从这些例子希望你能推断你在找什么。

+0

这不会给你''获得'每个月的客户' –

+0

@MostyMostacho ...你这么说是因为...? – miyasudokoro

+0

因为你在某个月只有一个'where'子句(?),所以我看到你的查询,我发现你甚至解释说只能在2013年9月使用。'2013年9月!=每月':/ –