首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免对间隔中的重复值进行求和

如何避免对间隔中的重复值进行求和
EN

Stack Overflow用户
提问于 2018-07-31 22:12:38
回答 2查看 59关注 0票数 1

我现在遇到了一个问题,希望你能帮我解决。我需要将数据汇总到每天每15分钟生成一次的格式。下面是我第一次使用的代码:

代码语言:javascript
复制
SELECT TOP 1000
agi.date_time as [Date],
AGI.AGENT_URN as AgentID,
asgi.skillgroup_urn as SkillID,
count(distinct(asgi.skillgroup_urn)) as [# of skills],
sum(asgi.CALLS_HANDLED) as [Calls Handled In],
sum(agi.LOGGED_ON_TIME)/count(DISTINCT(asgi.SKILLGROUP_URN)) as [Logged On Time (Per Agent)],
sum(agi.NOT_READY_TIME)/count(DISTINCT(asgi.SKILLGROUP_URN)) as [Not Ready Time (Per Agent)],
sum(agi.AVAIL_TIME)/count(DISTINCT(asgi.SKILLGROUP_URN)) as [Available Time (Per Agent)]

FROM AGENT_INTERVAL AGI
LEFT OUTER JOIN AGENT_SKILLGROUP_INTERVAL ASGI ON AGI.AGENT_URN = ASGI.AGENT_URN AND AGI.DATE_TIME = ASGI.DATE_TIME


WHERE 1=1
AND AGI.DATE_TIME between '2018-07-26 16:15:00 ' and '2018-07-26 16:45:59'

GROUP BY 
AGI.DATE_TIME,
AGI.AGENT_URN,
asgi.skillgroup_urn

ORDER BY 2

结果如下:

Interval data

如您所见,每个座席的登录时间、未就绪时间和可用时间值不断重复,因为这与AgentID相关。这种观点并不能说明问题。座席在17:45时间间隔内记录了900秒,在18:00时间间隔内又记录了900秒。如果我现在对其求和,将得到9000秒的结果,这对于登录时间是不正确的。Not Ready时间和Available Time也不正确。

如果从select语句中删除SkillID,我的值将正确反映

Without skills being represented

这一次,我在17:45得到900秒,在18:00得到900秒,这是正确的。

我有问题的地方是把它回滚到一整天。

代码语言:javascript
复制
SELECT TOP 1000
cast(agi.date_time as date) as [Date],
AGI.AGENT_URN as AgentID,
asgi.skillgroup_urn as SkillID,
count(distinct(asgi.skillgroup_urn)) as [# of skills],
sum(asgi.CALLS_HANDLED) as [Calls Handled In],
sum(agi.LOGGED_ON_TIME)/count(DISTINCT(asgi.SKILLGROUP_URN)) as [Logged On Time (Per Agent)],
sum(agi.NOT_READY_TIME)/count(DISTINCT(asgi.SKILLGROUP_URN)) as [Not Ready Time (Per Agent)],
sum(agi.AVAIL_TIME)/count(DISTINCT(asgi.SKILLGROUP_URN)) as [Available Time (Per Agent)]

FROM AGENT_INTERVAL AGI
LEFT OUTER JOIN AGENT_SKILLGROUP_INTERVAL ASGI ON AGI.AGENT_URN = ASGI.AGENT_URN AND AGI.DATE_TIME = ASGI.DATE_TIME


WHERE 1=1
AND AGI.DATE_TIME between '2018-07-26 16:15:00 ' and '2018-07-26 16:45:59'

GROUP BY 
cast(AGI.DATE_TIME as date),
AGI.AGENT_URN,


ORDER BY 2

Data rolled up to the day

现在我的登录时间是1500秒,比实际时间少了300秒。

如何修复此问题,以便当我汇总当天的数据时,我可以在报告中获得准确的登录时间、未就绪时间和可用时间?

谢谢你的帮忙!

Daily view per skill

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-01 01:49:52

通过以下方式修改我的代码,找到了问题的解决方案。

代码语言:javascript
复制
select 
AGI.*
,ROW_NUMBER() OVER (PARTITION BY DATE_TIME,AGENT_URN ORDER BY DATE_TIME) AS SEQNUM 
from AGENT_SKILLGROUP_INTERVAL AGI

)

SELECT 

CAST(AI.DATE_TIME AS DATE) [Date]
,SUM(AI.CALLS_HANDLED) AS [Calls Handled In]
,SUM(AI.HANDLED_CALLS_TALK_TIME)/nullif(sum(AI.calls_handled),0) as [Avg. Talk Time In]
,SUM(AI.INCOMING_CALLS_ON_HOLD_TIME)/nullif(sum(AI.calls_handled),0) as [Avg. Hold Time In]
,SUM(AI.HANDLED_CALLS_TIME-(AI.HANDLED_CALLS_TALK_TIME + AI.INCOMING_CALLS_ON_HOLD_TIME))/nullif(sum(AI.calls_handled),0) as [Avg. Wrap Time In]
,SUM(AI.[HANDLED_CALLS_TIME])/nullif(sum(AI.calls_handled),0) as [Avg. Handle Time In]
,SUM(CASE WHEN SEQNUM = 1 THEN AI.LOGGED_ON_TIME END) AS [Logged On Time (Per Agent)]
,SUM(ai.HANDLED_CALLS_TALK_TIME) as [Talk Time In]
,SUM(ai.HANDLED_CALLS_TALK_TIME + ai.INCOMING_CALLS_ON_HOLD_TIME) as [Phone Time In]
,SUM(ai.[INCOMING_CALLS_ON_HOLD_TIME]) as [Hold Time In]
,SUM(ai.HANDLED_CALLS_TIME-(ai.HANDLED_CALLS_TALK_TIME + ai.INCOMING_CALLS_ON_HOLD_TIME) ) AS [Wrap Time In]
,SUM(CASE WHEN SEQNUM = 1 THEN AI.NOT_READY_TIME END) as [Not Ready Time (Per Agent)]
,SUM(CASE WHEN SEQNUM = 1 THEN AI.AVAIL_TIME END) as [Available Time (Per Agent)]

FROM Agent_Interval AI


group by 
CAST(AI.DATE_TIME AS DATE)

通过对每个间隔进行排名,我现在可以准确地报告我的logged_on_time、avail_time和not_ready_time。

票数 0
EN

Stack Overflow用户

发布于 2018-07-31 23:08:21

对于1个呼叫座席,您可以将座席状态分为:可用、在线、呼叫后工作(工作未就绪)、辅助(avaya guys喜欢许多不同的aux代码,用于不同的中断类型)、离线、其他。

你并不真的需要离线处理,但你必须在其他时间正确地区分和处理。您可以查阅Avaya Call Management System (Avaya CMS)指南以了解正确的说明,但简而言之,这是座席从事其他技能或处理直接呼叫的时间,无论是呼叫中还是呼叫后工作。因此,同一时刻只有一个技能可以具有呼叫时间或ACW时间,并且这两个技能的优先级高于可用时间和其他时间。

如果你想处理多个呼叫(聊天)处理系统,你就有麻烦了-这样你就会一直处理交叉呼叫。您仍然可以将时间按时间间隔划分,其中呼叫/ACW时间优先于可用时间和辅助时间。

所有技能的基本可用时间和辅助时间应该同步,但如果不同步,则在此处使用按技能判断报告比按座席报告更容易。

对于提到的Avaya CMS,有15分钟的汇总,我相信这是在DB之外完成的,然后将间隔数据存储在运行时表中,并在一天结束时将间隔数据汇总为每日数据。类似地,每周和每月的数据都会被处理。

我建议你阅读CMS文档-它定义了几十年的数据库结构,所以它们几乎捕捉到了所有的细微差别。

作为附注,在“我自己的”呼叫中心操作员控制台中,有一个明确的表,用于操作员状态历史记录和开始-停止时间,以及此时间间隔的一个确定状态。因此,汇总比合并不同的交叉记录要容易一些。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51615466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档