事件的 SQL 频率

Posted

技术标签:

【中文标题】事件的 SQL 频率【英文标题】:SQL frequency of event 【发布时间】:2013-04-09 12:11:31 【问题描述】:

我被要求报告我们客户的联系频率,即每周、每月、每季度或每年看到我们的客户数量。

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

我可以获取客户的联系人数量:-

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)

然而,我正在努力融入分发的复杂性。例如,有些客户的联系人很多,但他们可能一开始每周都有联系人,现在他们只有每年一次的检查。

我可以接受这是不可能的,但如果有人做过类似的工作,我会很感激你的见解。

非常感谢

【问题讨论】:

您可能希望加入某种对数级数。让客户在线性和对数报告之间进行选择。如果是对数,则刻度应随着时间的推移显示出更平衡的频率。 你能定义“每周”等吗?每周一次的接触是绝对每周一次的吗?给我们一些参数并显示所需的结果集 诚然,我尝试使用平均值,而不是每周必须看到一次。每周将是每月 4 次或更多联系人;每月有 1 到 3 次联系,等等。 【参考方案1】:

试试这个。我不确定,因为我无法查看任何示例数据输出。不过试试这个吧。

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 

【讨论】:

谢谢。这是我一直在玩的一个解决方案,尽管它只适用于开始日期超过一个月的人。也许这是我能到达的最接近的地方。

以上是关于事件的 SQL 频率的主要内容,如果未能解决你的问题,请参考以下文章

控制事件触发频率的两种策略:Debounce && Throttle

为啥我的触摸事件频率在 iOS 4.0 上变慢了?

Flutter: debounce 避免高频率事件

GCM 服务器在哪个时间频率刷新注册 ID 以及如何在我的手机中获取 regId 更改事件?

浏览器滚动事件在 iOS 和 Android 设备上触发的频率不够高

机器学习基础统计学(频率派与贝叶斯派)