因此,我有一张表,其中提供了一组包含座席和通话时间的结果集。
发生时间重叠时,我有点卡住了。请参见下表示例:
Agent |CallType |StartTime |EndTime |Duration(s) |Number
35171 |3 |06/01/2020 14:12:57 |06/01/2020 14:14:07 |70 |42572491
35171 |3 |06/01/2020 14:23:54 |06/01/2020 14:24:27 |33 |42572491
35171 |3 |06/01/2020 14:34:28 |06/01/2020 14:36:32 |124 |42572491
35171 |3 |06/01/2020 14:43:06 |06/01/2020 14:45:43 |157 |42572491
35171 |4 |06/01/2020 14:45:32 |06/01/2020 15:06:17 |1245 |42572491
我需要获取此代理的总持续时间,通常需要对“持续时间”列求和。但是,如果查看最后一行,则可以看到星光时间在上一个通话结束(行上方)之前的11秒开始,因此,该时间不应包括在总持续时间中。因此,应该忽略重叠。
有关如何在Sql Server中实现此目标的任何说明都很好。
嗯。 。 。如果重叠是“简单的”,则可以使用累积的min()
来获取下一个开始时间,并使用该时间来生成“调整后的”持续时间:
select agent,
sum(case when next_starttime < endtime
then datediff(second, starttime, next_starttime)
else duration
end)
from (select t.*,
min(starttime) over (partition by agent order by starttime) as next_starttime
from t
) t
group by agent;
简单地说,我的意思是,没有一个电话完全“包围”另一个电话。所以这是允许的:
A------B--A-------B
但不是:
A-------B--B------A