在下面的链接示例中,您将看到来自agentconnectiondetail表的来自Cisco UCCX Express的示例电话数据。
这是我正在运行的查询:
SELECT *
FROM agentconnectiondetail
WHERE startdatetime >= TO_DATE('01-01-2015 05:00','%m-%d-%Y %H:%M')
AND sessionseqnum = 0
我的问题是如何才能使SessionID的唯一信息成为呼叫的唯一标识符,但保留接听电话的座席的人数?
例如,我在示例选项卡上的文档中突出显示了sessionID 43000086306.数据显示,对于sessionID 43000086306,调用进入并在第三个选择之前在两个代理位置响起。你看到了这一点,因为资源ID发生了变化,并且这些位置记录了10秒的响铃时间,但由于通话时间为0,因此手机未被接听。如何将振铃时间加在一起并保留接听电话的座席的资源ID号码
https://www.dropbox.com/s/9ggxb1ndxp4vid6/sample_data.xlsx?dl=0
答案 0 :(得分:1)
在infomix上未经测试。我不熟悉informix,也没有测试环境。因此,我基于ANSII标准模拟了SQL,并避免使用可能特定于数据库的语法。这导致子查询,如果我更好地了解语法,则可以避免使用子查询...
这是通过SQL Fiddle
在SQL Server上工作的SELECT O.SessionID, C.ResourceID, C.StartDateTime, C.EndDateTime,
sum(O.ringTime) as TotalRingTime, sum(O.talkTime) as TotalTalkTime,
Sum(O.HoldTime) as TotalHoldTime, Sum(O.WorkTime) as TotalWorkTime,
count(Distinct O.ResourceID) as CntofRes
FROM AgentConnectionDetail O
LEFT JOIN
(
SELECT A.SessionID, A.ResourceID, A.StartDateTime, A.EndDateTime
FROM AgentConnectionDetail A
INNER JOIN (
SELECT SessionID, Max(StartDateTime) as StartDateTime
FROM AgentConnectionDetail
GROUP BY SessionID) B
on A.SessioNID = B.SessionID
and A.StartDateTime = B.StartDateTime) C
on C.SessionID=O.SessionId
GROUP BY O.SessionID, C.ResourceID, C.StartDateTime, C.EndDateTime
ORDER BY SessionID
B
。A
以获取接听电话的人的资源ID。这导致包含会话的内联视图,
资源,startdatetime,endDateTime,我Labeled C
。我添加了一个cntOfRes来显示该会话中涉及3个资源,并且只模拟了一些数据。
答案 1 :(得分:0)
使用子查询可能能够解决 但是根据您将要读取的数据量以及是否存在sesisonid索引,性能可能会受到影响。
SELECT sessionid
, ( select resourceid from agentconnectiondetail b
where a.sessionid = b.sessionid and b.talktime > 0
) as resourceid_talktime
, sum(ringtime) as rings
FROM agentconnectiondetail a
WHERE startdatetime >= TO_DATE('01-01-2015 05:00','%m-%d-%Y %H:%M')
AND sessionseqnum = 0
group by 1,2
其他选项,如果您拥有正确的索引,可能会获得更好的性能。
SELECT a.sessionid
, b.resourceid
, sum(a.ringtime) as rings
FROM agentconnectiondetail a
, ( select sessionid, resourceid from agentconnectiondetail where talktime > 0
and startdatetime >= TO_DATE('01-01-2015 05:00','%m-%d-%Y %H:%M')
and sessionseqnum = 0
) as b
WHERE a.startdatetime >= TO_DATE('01-01-2015 05:00','%m-%d-%Y %H:%M')
AND a.sessionseqnum = 0
and a.sessionid = b.sessionid
group by 1,2