关联MySQL DB的先前记录

时间:2013-04-25 21:14:04

标签: mysql

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

一些背景信息:

我们可以通过“电话即服务”公司获得呼叫中心报告API。我从XML接口中获取的相关字段是:

  • AGENT_NAME
  • interaction_id
  • origination< - 这是“来电显示”,并不总是准确
  • create_timestamp
  • accept_timestamp
  • abandon_timestamp
  • queue_id

在我们的“主”队列中排队后,每个座席都会应答常规电话(在这种情况下为交互)。 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。我还在计划中。

1 个答案:

答案 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
;