2013-02-22 287 views
1

想象我有客戶的表已經從一些退訂:查詢號碼沒有出現在另一個表的日期範圍

DateMonthID  customerID 
    201301   123 
    201301   321 
    201302   987 
    201303   567 
    201303   728 

等等等等

和客戶的另一個表每個月他們的訂閱用戶

DateMonthID  customerID  subscriptionType 
    ...    ...    1 
    ...    ...    3 
    ...    ...    2 
    ...    ...    3 

等等等等

我需要對第一個表中沒有出現在第二個表中的所有行進行計數3個月。例如,我需要的,如果他沒有第二個表月間出現的201302(2月)和201305計數客戶987(5月)

目前,我有以下幾點:

SELECT 
    COUNT(1) AS Total, 
    table1.DateMonthID AS MonthID 
FROM 
    table1 
WHERE 
table1.DateMonthID <= 201212-3 
AND NOT EXISTS (SELECT * FROM table2 
         WHERE (table2.DateMonthID >= table1.DateMonthID AND table2.DateMonthID <= (table1.month_key + 3)) 
         AND table2.customerID = table1.customerID) 
GROUP BY 
table1.DateMonthID 

這使我看起來像

Total MonthID 
1000 201301 
2345 201302 
4532 201303 
986  201304 
etc  etc 

這看起來不錯,但我想現在要做的也是一羣以subscriptiontype輸出。我確定這意味着我需要做一個連接,但是對於SQL來說很新,我對於什麼連接和哪裏是無能爲力的。我嘗試過在customerIds和innerId之間進行內部連接,但最終總計超過了表1中對應月份的記錄數量。

回答

0

這個查詢(或使用count(*))

SELECT 
    COUNT(table1.DateMonthID) AS Total, 
    subscribers.subscriptionType 
FROM 
    table1 
    INNER JOIN subscribers 
    ON table1.DateMonthID = subscribers.DateMonthID 
     AND table1.customerID = subscribers.customerID 
WHERE 
     table1.DateMonthID <= 201212-3 
    AND NOT EXISTS (SELECT * FROM table2 
        WHERE (table2.DateMonthID >= table1.DateMonthID 
        AND table2.DateMonthID <= (table1.month_key + 3)) 
        AND table2.customerID = table1.customerID) 
GROUP BY subscribers.subscriptionType 

將由用戶給你的記錄總數。

如果您希望按用戶和月份分組,請在組中添加DateMonthID。

GROUP BY subscribers.subscriptionType, table1.DateMonthID 

請記住將table1.DateMonthID添加到select以在結果上查看它。

+0

我不能對此進行測試,直到星期一,但它看起來不錯。雖然我不想按表1屬性進行分組? – EvilWeebl 2013-02-23 10:48:10

+0

你是對的,我忘了你想按類型分組,而不是按訂閱鍵。 – 2013-02-23 19:35:06

+0

嗨,我已經嘗試過你的解決方案,但與Alexanders解決方案一樣,我沒有得到任何結果,我不確定這個連接到一個名爲訂戶的表是從哪裏來的? – EvilWeebl 2013-02-25 10:15:34

0

嘗試此查詢

SELECT COUNT(*) AS Total, table1.DateMonthID AS MonthID, subscribers.subscriptionType 
FROM table1 JOIN subscribers ON table1.DateMonthID = subscribers.DateMonthID 
            AND table1.customerID = subscribers.customerID 
WHERE table1.DateMonthID <= 201212 - 3 
AND NOT EXISTS (SELECT * 
       FROM table2 
       WHERE (table2.DateMonthID >= table1.DateMonthID 
        AND table2.DateMonthID <= (table1.month_key + 3)) 
        AND table2.customerID = table1.customerID) 
GROUP BY table1.DateMonthID, subscribers.subscriptionType 
+0

這看起來不錯,我對它有很好的感覺。我會在星期一看到第一件事,讓你知道它是怎麼回事。 – EvilWeebl 2013-02-23 10:49:02

+0

沒問題;)... – 2013-02-23 10:54:25

+0

嗨,我已經嘗試了你的解決方案,但得到0結果回來。我也注意到你加入一個名爲訂閱者的表,這應該是table2嗎? – EvilWeebl 2013-02-25 10:13:57