我在MySQL中遇到某个查询时遇到问题,我希望有人可以帮助我。
一些背景信息:
我们可以通过“电话即服务”公司获得呼叫中心报告API。我从XML接口中获取的相关字段是:
在我们的“主”队列中排队后,每个座席都会应答常规电话(在这种情况下为交互)。 create_timestamp字段是呼叫开始排队到属于“Main”的代理的时间,accept_timestamp是代理应答呼叫的时间。 abandon_timestamp是呼叫者厌倦排队的时间,1)挂断,或2)按菜单选项转到语音邮件。语音邮件保存为.mp3文件,并排队到同一组代理,就像它是一个新的入站呼叫一样,除了它与“Main_VM”队列而不是“主”队列相关联。
棘手的部分是:
如果来电并且“放弃”到语音邮件,则对于代理队列的语音邮件.mp3,interaction_id不会保持不变。也不总是增加1 ...有时候在人排队期间其他呼叫进入。以下是示例记录片段:
A)
+----------------+--------------+---------------------+---------------------+---------------------+---------------+
| interaction_id | origination | create_timestamp | accept_timestamp | abandon_timestamp | queue_id |
+----------------+--------------+---------------------+---------------------+---------------------+---------------+
| 21771 | NNNPPPXXXX | 2012-09-04 08:26:15 | 0000-00-00 00:00:00 | 2012-09-04 08:27:17 | Main |
| 21772 | NNNPPPXXXX | 2012-09-04 08:27:44 | 2012-09-04 08:32:07 | 0000-00-00 00:00:00 | Main_VM |
+----------------+--------------+---------------------+---------------------+---------------------+---------------+
B)
+----------------+--------------+---------------------+---------------------+---------------------+---------------+
| interaction_id | origination | create_timestamp | accept_timestamp | abandon_timestamp | queue_id |
+----------------+--------------+---------------------+---------------------+---------------------+---------------+
| 2195 | AAAAAAAAAA | 2011-10-28 09:21:02 | 2011-10-28 09:23:50 | 0000-00-00 00:00:00 | Main |
| 2197 | NNNPPPXXXX | 2011-10-28 09:22:37 | 0000-00-00 00:00:00 | 2011-10-28 09:26:42 | Main |
| 2199 | BBBBBBBBBB | 2011-10-28 09:23:38 | 2011-10-28 09:27:23 | 0000-00-00 00:00:00 | Main |
| 2200 | CCCCCCCCCC | 2011-10-28 09:24:40 | 2011-10-28 09:33:09 | 0000-00-00 00:00:00 | Main |
| 2201 | NNNPPPXXXX | 2011-10-28 09:27:16 | 2011-10-28 09:42:28 | 0000-00-00 00:00:00 | Main_VM |
+----------------+--------------+---------------------+---------------------+---------------------+---------------+
在MySQL中,我需要能够将interaction_id 2197与2201和21771与21772相关联。我会做TIMESTAMPDIFF()
这样的事情来计算接听电话的“总时间”,SLA遇到&被遗弃的百分比,等等;同时还占运营和节假日的小时数。我想我已经完成了大部分工作,但我的主要麻烦就是我刚才所描述的。
注意:我打算将“0000-00-00 00:00:00”时间戳更改为NULL。我还在计划中。
答案 0 :(得分:0)
我在这方面取得了一些进展,我想我会分享。我只是让其中一个字段使用LIMIT 1
:
select interaction_id, origination, create_timestamp, accept_timestamp, abandon_timestamp, queue_name, parent_call, agi.agent_name
from (
(
select interaction_id, origination, create_timestamp, accept_timestamp, abandon_timestamp, queue_name,
(
select interaction_id
from queue_interactions q1
where q1.origination = q2.origination
and ABS(timestampdiff(SECOND, q1.abandon_timestamp, q2.create_timestamp)) < 180
order by q2.abandon_timestamp
LIMIT 1
) as parent_call
from queue_interactions q2
where q2.queue_name = "Service Desk VM"
)
UNION
(
select interaction_id, origination, create_timestamp, accept_timestamp, abandon_timestamp, queue_name, NULL as parent_call
from queue_interactions q3
where q3.queue_name = "Service Desk"
)
) a natural left join agent_interactions agi
order by a.create_timestamp
;