首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >重叠呼叫持续时间

重叠呼叫持续时间
EN

Stack Overflow用户
提问于 2014-09-08 10:57:18
回答 4查看 765关注 0票数 0

是否有办法计算一个呼叫是否与另一个正在进行的呼叫重叠。

例如,我有一个电话在10:00打进来,最后打到10:05

第二个调用来自10:02,结束于10:06,所以第一个调用是重叠的,我如何在一个sql查询中显示这一点?我有几千个电话要比较。

表我使用了CallID, TimeAns, TimeFin

欢迎任何建议。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-09-08 11:19:51

以下是不包括在内的查询:

代码语言:javascript
运行
复制
SELECT * FROM myCalls t1
INNER JOIN myCalls t2 on t2.CallID != t1.CallID 
    AND t1.TimeAns < t2.TimeFin
    AND t1.TimeFin >  t2.TimeAns 

此查询将为每个重叠返回2行。如果您希望每个重叠只包含一行,这将完成以下操作:

代码语言:javascript
运行
复制
SELECT * FROM myCalls t1
INNER JOIN myCalls t2 on t2.CallID > t1.CallID 
    AND t1.TimeAns < t2.TimeFin
    AND t1.TimeFin >  t2.TimeAns 
票数 0
EN

Stack Overflow用户

发布于 2014-09-08 11:03:02

当呼叫1的开始或结束在呼叫2的开始和结束之间时,两个呼叫重叠。(不管你称之为“呼叫1”和“呼叫2”两个呼叫中的哪一个。)

代码语言:javascript
运行
复制
WHERE 
(
  call1.start BETWEEN call2.start AND call2.end
  OR
  call1.end BETWEEN call2.start AND call2.end
)

编辑:如果你考虑两个电话,其中一个同时结束,另一个开始重叠或不重叠,那就做好决定吧。中间条款是这样的。因此,如果您不想这样做,请用(call1.start > call2.start AND call1.start < call2.end)替换它。

编辑:查找所有重叠的呼叫组合:

代码语言:javascript
运行
复制
select * 
from calls
join calls other 
  on other.callid < calls.callid and 
  (
    (calls.timeans > other.timeans and calls.timeans < other.timefin)
    or
    (calls.timefin > other.timeans and calls.timeans < other.timefin)
  )
;
票数 0
EN

Stack Overflow用户

发布于 2014-09-08 11:06:56

在两个调用重叠的同一表上加入:

代码语言:javascript
运行
复制
SELECT * FROM TABLE
JOIN TABLE t2 on t2.CallID != TABLE.CallID and 
    (CallID.TimeFin BETWEEN t2.TimeAns AND t2.TimeFin
    OR CallID.TimeAns BETWEEN t2.TimeAns AND t2.TimeFin)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25722694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档