是否有办法计算一个呼叫是否与另一个正在进行的呼叫重叠。
例如,我有一个电话在10:00
打进来,最后打到10:05
。
第二个调用来自10:02
,结束于10:06
,所以第一个调用是重叠的,我如何在一个sql查询中显示这一点?我有几千个电话要比较。
表我使用了CallID, TimeAns, TimeFin
欢迎任何建议。
发布于 2014-09-08 11:19:51
以下是不包括在内的查询:
SELECT * FROM myCalls t1
INNER JOIN myCalls t2 on t2.CallID != t1.CallID
AND t1.TimeAns < t2.TimeFin
AND t1.TimeFin > t2.TimeAns
此查询将为每个重叠返回2行。如果您希望每个重叠只包含一行,这将完成以下操作:
SELECT * FROM myCalls t1
INNER JOIN myCalls t2 on t2.CallID > t1.CallID
AND t1.TimeAns < t2.TimeFin
AND t1.TimeFin > t2.TimeAns
发布于 2014-09-08 11:03:02
当呼叫1的开始或结束在呼叫2的开始和结束之间时,两个呼叫重叠。(不管你称之为“呼叫1”和“呼叫2”两个呼叫中的哪一个。)
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)
替换它。
编辑:查找所有重叠的呼叫组合:
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)
)
;
发布于 2014-09-08 11:06:56
在两个调用重叠的同一表上加入:
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)
https://stackoverflow.com/questions/25722694
复制相似问题