在T SQL中存在重叠的持续时间

问题描述 投票:0回答:1

因此,我有一张表,其中提供了一组包含座席和通话时间的结果集。

发生时间重叠时,我有点卡住了。请参见下表示例:

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中实现此目标的任何说明都很好。

sql sql-server overlapping
1个回答
0
投票

嗯。 。 。如果重叠是“简单的”,则可以使用累积的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
© www.soinside.com 2019 - 2024. All rights reserved.