我需要获取当天每位用户每小时的总通话次数,然后计算该用户接听的来电百分比。归根结底的目的是计算每个用户每小时的红利底池百分比。
我可以获得大部分信息,但我无法计算每小时的总通话次数,即每个小时组的总通话次数......
假设以下数据(必要时将日期更改为当前日期):
EnteredBy EnteredOn
Lisa Scandaleyes 05/07/2017 07:40:04
Fred Smith 05/07/2017 07:54:17
A User 05/07/2017 08:15:06
Johnny Johnson 05/07/2017 08:20:57
A User 05/07/2017 09:27:29
A User 05/07/2017 09:36:16
A User 05/07/2017 09:42:36
A User 05/07/2017 10:09:57
我可以很容易地每小时接听电话:
SELECT DATEPART(HOUR, [EnteredOn]) AS Hour, Count(*) as CallsPerHour
FROM CallHandlingCallData
WHERE DATEDIFF(d, EnteredOn, GetDate())= 0
GROUP BY DATEPART(HOUR, [EnteredOn])
ORDER BY Hour;
我还可以获得每个用户每小时的电话:
SELECT DATEPART(HOUR, [EnteredOn]) AS Hour, EnteredBy, Count(*) as CallsTaken
FROM CallHandlingCallData
WHERE DATEDIFF(d,EnteredOn, GetDate())= 0
GROUP BY DATEPART(HOUR, [EnteredOn]), EnteredBy
ORDER BY Hour, EnteredBy;
我什至可以得到我想要的几乎所有东西,除了 TotalCalls 值,因此百分比基于当天的 ALL CALLS:
SELECT Hour, EnteredBy, CallsTaken, TotalCalls,
CAST(CallsTaken AS Decimal(10,2)) * 100 / CASE TOTALCALLS WHEN 0 THEN 1 ELSE TotalCalls END AS Percentage
FROM
(
SELECT DATEPART(HOUR, [EnteredOn]) AS Hour, EnteredBy, Count(*)as CallsTaken,
(SELECT Count(*) FROM CallHandlingCallData WHERE DATEDIFF(d, EnteredOn, GetDate())= 0) AS TotalCalls
FROM CallHandlingCallData
WHERE DATEDIFF(d,EnteredOn, GetDate())= 0
GROUP BY DATEPART(HOUR, [EnteredOn]), EnteredBy
) data
ORDER BY Hour, EnteredBy;
这真的很接近,我只需要让子查询给我那个小时的总呼叫数,而不是一整天。
笔记
- 我无法使用 OVER(),因为可能与最终查询一起使用的数据库引擎之一不支持它。
- 我更愿意在 UI 中进行此类计算,但结果必须输出到电子表格中删除该选项
任何建议将不胜感激。