2013-04-09 57 views
4

我被要求報告我們客戶的聯繫頻率,即每週,每月,每季或每年查看多少客戶。事件的SQL頻率

當在論壇中討論「頻率」時,他們通常指的是表中某個值的存在次數。

我可以得到一個客戶端已經有聯繫人的數目: -

select 
    A.client_ID, A.start_date, A.Months_in_Service, 
    B.Contacts, (B.Contacts/A.Months_in_Service) as Contacts_per_Month_in_Service 
from 
    tbl_client A 
left outer join 
    (select 
     client_ID, COUNT(contact_date) as Contacts 
    from 
     tbl_client_contact 
    group by 
     client_ID) as B ON A.client_ID = B.client_ID 
where 
    (A.end_date is null) 

不過,我努力合併分佈的複雜性。例如,一些客戶有很多聯繫人,但是他們可能每週都有聯繫人,但現在他們每年只進行一次檢查。

我可能會接受這是不可能的,但如果有人在那裏做了類似的工作,我會很感激你的見解。

非常感謝

+0

您可能希望納入某種對數級數。讓客戶在線性和對數報告之間進行選擇。如果是對數的,那麼隨着時間的推移,量表應該顯示更平衡的頻率。 – Sablefoste 2013-04-09 12:20:59

+0

你能定義「每週」等嗎?是每週接觸一次,每週接觸一次?給我們一些參數,並顯示所需的結果集 – 2013-04-09 17:25:18

+0

不可否認,我嘗試過使用平均值,而不是每週一次的嚴格必須看到的一次。每週會有4個或更多的聯繫人每月;每月1到3個聯繫人將是每月等。 – InfoGirl875 2013-04-11 07:44:13

回答

0

試試這個。我不確定,因爲我無法查看任何示例數據輸出。但是試試這個。

SELECT A.client_ID, A.start_date, A.Months_in_Service, B.Contacts2, 
     AVG(B.Contacts2/A.Months_in_Service) as Contacts_per_Month_in_Service 
FROM 
(
    select Contacts, Count(Months_in_Service) as Contacts 
    from tbl_client 
) AS A 
LEFT JOIN 
(
    select client_ID, COUNT(contact_date) as Contacts2 
    from tbl_client_contact 
    group by client_ID 
) as B ON A.client_ID = B.client_ID 
WHERE (A.end_date is null) 
GROUP BY A.client_ID, A.start_date, A.Months_in_Service, 
     B.Contacts, Contacts_per_Month_in_Service 
+0

謝謝。這是我玩過的解決方案,但它只適用於開始日期比一個月前更長的人。也許這是我能達到的最接近的。 – InfoGirl875 2013-04-12 09:44:08