当前一个仍在进行中时,座席开始呼叫

问题描述

我有一个 CALLS 表

CALL_ID | OPERATOR_ID |       CALL_START      |        CALL_END       | NOTES | TYPE
========+=============+=======================+=======================+=======+======
    101 |    3000     | '2020-12-12 08:00:00' | '2020-12-12 08:10:00' |  ...  | ...
    102 |    3000     | '2020-12-12 08:08:00' | '2020-12-12 08:20:00' |  ...  | ...

CALL_ID 102 在 CALL_ID 101 结束之前已经开始(对于相同的 operator_ID)。

我需要找到 CALL_END > CALL_START 的调用(在同一操作员的下一行)并且我卡住了。

解决方法

通过 OPERATOR_ID 加入针对自身的 CALLS 表,查找在任何“左手”呼叫记录的 CALL_START 和 CALL_END 之间具有 CALL_START 的“右手”呼叫记录:

SELECT c.operator_id,c.call_id,c.call_start,c.call_end,other.call_id,other.call_start
  FROM calls c
 INNER JOIN
       calls other
    ON c.operator_id = other.operator_id
 WHERE c.call_id != other.call_id
       AND
       other.call_start BETWEEN c.call_start AND c.call_end