如何使用另一个 table 作为过滤器来计算代理状态时间秒数

How to sum agent state time seconds using another table as a filter

我的特工需要在特定技能下登录他们的控制台,然后他们可以从那里 select 他们的状态代码。例如,就绪、未就绪。如果他们 select 未就绪状态,则他们需要 select 原因代码。洗手间、会议等

我想列出每个代理登录到特定技能的列表,并计算他们在该技能中的总秒数,但不包括特定原因代码。因此,例如,如果他们在洗手间注销 1000 秒,那么我希望从结果中减去该时间。出于某种原因,我得到的秒数总是比预期的少得多。

这是我的代码如何显示的演示:

DECLARE @startDate DATE = '2021-08-19'  

SELECT    
    B.Agent,   
    A.Date,   
    A.StartTime,   
    A.EndTime,   
    A.SkillTimeSecs,   
    A.Skill
    
FROM    
    Database.AgentSkill AS A  
    
JOIN   
    Database.AgentState AS B   
    ON A.SessionID=B.SessionID  
    
WHERE    
    A.Date = @startDate 
    AND B.Date = @startDate  
    AND B.Interval_30Minute BETWEEN '06:00:00' AND '17:00:00'   
    AND A.Skill = 'Agent'
    AND B.ReasonCode IN ('Follow-Up Work','Task Completion','Out calls')

GROUP BY   
     
    B.Agent,   
    A.Date,   
    A.StartTime,   
    A.EndTime,
    A.SkillTimeSecs,   
    A.Skill

知道为什么秒数这么少吗?

您的 SELECT 语句中没有任何聚合函数,因此您的 GROUP BY 实际上是一个 DISTINCT。如果您想要 SkillTimeSecs 的总数,则需要将其从 GROUP BY 子句中删除并使用 SUM 函数:

SELECT    
    B.Agent,   
    A.Date,   
    A.StartTime,   
    A.EndTime,   
    SUM(A.SkillTimeSecs) TotalSkillTimeSecs,   
    A.Skill
    
FROM    
    Database.AgentSkill AS A  
    
JOIN   
    Database.AgentState AS B   
    ON A.SessionID=B.SessionID  
    
WHERE    
    A.Date = @startDate 
    AND B.Date = @startDate  
    AND B.Interval_30Minute BETWEEN '06:00:00' AND '17:00:00'   
    AND A.Skill = 'Agent'
    AND B.ReasonCode IN ('Follow-Up Work','Task Completion','Out calls')

GROUP BY   
     
    B.Agent,   
    A.Date,   
    A.StartTime,   
    A.EndTime,
    A.Skill