【问题标题】:SQL frequency of event事件的 SQL 频率
【发布时间】: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 次联系,等等。

标签: sql sql-server frequency ssms


【解决方案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 

【讨论】:

  • 谢谢。这是我一直在玩的一个解决方案,尽管它只适用于开始日期超过一个月的人。也许这是我能到达的最接近的地方。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-04
  • 2020-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-11
  • 2011-11-07
相关资源
最近更新 更多