2012-11-15 26 views
0

我有一個數據庫,其中包含多個表來跟蹤客戶以及我們與客戶之間的交互等。我使用PHP創建了一個報告,該報告應該顯示所有具有開放狀態且沒有在2周內記錄交互的客戶。我試圖做一個查詢,然後在處理這些結果時,它會運行另一個基於此查詢的查詢,但它非常緩慢,我無法使其正常工作。我認爲JOIN函數是我的答案,但我不完全確定如何實現它。SQL:選擇過去2周內沒有條目的客戶

我的表有以下字段:

customers: customer_id 
customers_marketing_options: customer_id, status 
customer_interactions: customer_id, created_on (yyyy-mm-dd hh:mm:ss) 

現在,我有選擇的是有一個開放的狀態的所有客戶。然後用這些結果,我選擇與該客戶ID的所有交互,created_on最多2周前,通過created_on日期對其進行排序,並選擇最上面一行(最近的交互)。但是,這會返回具有熱情狀態的客戶的互動。但是,它不檢查在過去的兩週內是否有互動。

這可能聽起來很混亂,但任何幫助或指導將不勝感激。

回答

1
SELECT cmo.customer_id, 
     Max(ci.created_on) as last_interaction 
FROM customer_marketing_options cmo 
    inner join customer_interactions ci 
    on cmo.customer_id = ci.customer_id 
WHERE 
    cmo.status = 'open' 
GROUP By 
    cmo.customer_id 
HAVING Max(ci.created_on) < DATE_SUB(CURDATE(),INTERVAL 14 DAY) 
+0

顯然,它只是一個條款+1 –

+0

它的工作表示感謝! – jasonhughes

1
SELECT customer_ID, created_on 
FROM customer_interactions 
WHERE MAX(created_on) <= (now() - INTERVAL 2 week) 
    AND ... status stuff ... 
GROUP BY customer_ID 
0

試試這個:

SELECT ci.customer_id, ci.created_on FROM customer_interactions ci 
LEFT JOIN customer_interactions ci2 
    ON (ci.customer_id = ci2.customer_id AND ci.created_on < ci2.created_on) 
JOIN customers_marketing_options cmo 
    ON (ci.customer_id = cmo.customer_id AND status = 'Open') 
WHERE ci2.created_on IS NULL AND ci.created_on < now() - interval 2 week 

檢查工作示例here