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