SQL事件频率

4

我被要求报告我们客户的联系频率,即每周、每月、每季度或每年有多少客户被接触到。

当论坛讨论“频率”时,通常是指表格中某个值存在的次数。

我可以获取客户已有过的联系次数:

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)

我正在努力解决分销的复杂性。例如,一些客户有很多联系人,但尽管他们可能最初每周进行联系,现在只需要年度检查。

也许我必须承认这不可能,但如果有人做过类似的工作,我会非常感激您的见解。

非常感谢。


您可以考虑使用某种对数递增方式。让客户在线性和对数报告之间进行选择。如果选择对数,比例尺应呈现出更平衡的频率随时间变化。 - Sablefoste
你能定义一下“weekly”吗?每周联系是指绝对每周只见一次吗?请给我们一些参数并展示所需的结果集。 - nathan_jr
诚然,我尝试使用平均值来工作,而不是严格的每周必须出现一次。每周将是每月4次或更多联系;每月1到3次联系将是每月等等。 - InfoGirl875
1个回答

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 

谢谢。这是我尝试的一个解决方案,但它只适用于起始日期早于一个月的人。也许这是我能接近它的最近方式。 - InfoGirl875

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接