0

我在 MySQL 中的某个查询遇到问题,希望有人可以帮助我。

一点背景资料:

我们的“电话即服务”公司提供了一个呼叫中心报告 API。我从他们的 XML 界面中获取的相关字段是:

  • 代理名称
  • 交互 ID
  • origination <-- 这是“来电显示”,并不总是准确的
  • 创建时间戳
  • 接受时间戳
  • 放弃时间戳
  • queue_id

在我们的“主要”队列中排队后,每个代理都会接听常规电话(在这种情况下为交互)。create_timestamp 字段是呼叫开始排队到属于“Main”的代理的时间,accept_timestamp 是代理应答呼叫的时间。放弃时间戳是呼叫者厌倦排队并且 1) 挂断,或 2) 按菜单选项转到语音邮件的时间。语音邮件保存为 .mp3 文件,并与新的入站呼叫一样排队到同一组代理,但它与“Main_VM”队列而不是“Main”队列相关联。

棘手的部分是:

如果有呼叫进入并“放弃”到语音邮件,则交互 ID 不会与排队等待座席的语音邮件 .mp3 保持相同。它也不总是以 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。我还在计划中。

4

1 回答 1

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
;
于 2013-04-29T20:16:59.687 回答