如何使用另一个 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
我的特工需要在特定技能下登录他们的控制台,然后他们可以从那里 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