2013-10-09 50 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月!=每月':/ –