我遇到以下问题。我正在查询呼叫中心数据库,我想检查未接听的电话。
我有一个呼叫进入时间戳(当有呼叫进入时),呼叫开始时间戳(当座席应答呼叫时)和呼叫结束时间戳。如果呼叫已应答并完成,我将在所有三列中都有值。如果未接来电,我将仅在通话输入时间戳中有值。还有一列指出呼叫的状态,如果已接听,则说“已应答”,如果未接,则说“已取消”。
我的问题如下,当座席不忙于另一个呼叫时,如何进行这样的查询以检查呼叫是否丢失/放弃。这意味着我必须检查所有通话开始和通话结束时间戳记之间的间隔,并排除此期间的未接来电。结果将仅是座席不忙时错过的呼叫。
主表列如下:
ID_agent
Caller_number
Entry_Time
Answer_Time
End_Time
Call_Duration
Call_Status
对于每个座席,您正在寻找其进入时间不在另一个呼叫的应答时间和结束时间之间的放弃的呼叫。
您可以使用left join
反模式来表达:
select t.*
from mytable t
left join mytabe t1
on t1.id_agent = t.id_agent
and t.entry_time between t1.answer_time and t1.end_time
where
t.call_status = 'ABANDONED'
and t1.id_agent is null
或具有not exists
条件:
select t.*
from mytable t
where
t.call_status = 'ABANDONED'
and not exists (
select 1
from mytable t1
where
t1.id_agent = t.id_agent
and t.entry_time between t1.answer_time and t1.end_time
)