Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Simultaneous calls

I'm trying to calculate the number of simultaneous calls at the time a particular call is made by looking at the datetime ranges. My query works, but takes ~10 minutes to perform for only 95,000 records, which is too long. Any ideas for optimization?

SELECT r.*,
       rr.ChannelsActive  'ChannelsActive'
FROM #rg r
OUTER APPLY
(
      SELECT SUM(1) AS ChannelsActive
      FROM #rg r_inner 
      WHERE 
      (
             r_inner.CallStart BETWEEN r.CallStart AND r.CallEnd 
            OR r_inner.CallEnd BETWEEN r.CallStart AND r.CallEnd
            OR r.CallStart BETWEEN r_inner.CallStart AND r_inner.CallEnd 
            OR r.CallEnd BETWEEN r_inner.CallStart AND r_inner.CallEnd

      )
 ) rr

Example Data

CREATE TABLE #rg
  (
     CallStart DATETIME,
     CallEnd   DATETIME
  )

CREATE INDEX ix1
  ON #rg(CallStart, CallEnd)

CREATE INDEX ix2
  ON #rg(CallEnd, CallStart);

WITH T(N, R)
     AS (SELECT TOP (95000) ROW_NUMBER() OVER (ORDER BY (SELECT 0)) AS RN,
                            ABS(120 + 30 * SQRT(-2 * LOG(ABS(CAST(CAST(CRYPT_GEN_RANDOM(8) AS BIGINT) AS FLOAT) / 9223372036854775807))) * COS(2 * PI() * ABS(CAST(CAST(CRYPT_GEN_RANDOM(8) AS BIGINT) AS FLOAT) / 9223372036854775807)))
         FROM   sys.all_objects o1,
                sys.all_objects o2)
INSERT INTO #rg
SELECT DATEADD(SECOND, N, GETDATE()),
       DATEADD(SECOND, N + R, GETDATE())
FROM   T 
like image 327
user172839 Avatar asked Jul 03 '13 07:07

user172839


People also ask

What is simultaneous calls?

Simultaneous call handling is phone system feature that forwards callers to the next available forwarding number when they reach a line that's currently busy or not answering.

What is simultaneous call capacity?

Simultaneous outgoing call capacity means the number of outgoing telephone calls that a telemarketer has the technological capability to make at the same time, whether or not the telemarketer has the personnel to actually make the calls.

What is simultaneous calls 3CX?

So, yes, internal calls are at least one call. If you are calling across a bridge from an extension on one 3CX server to an extension on another 3CX server is one call ON EACH 3CX SERVER. Obviously a conference call is going to be several simultaneous calls.


1 Answers

This should do it:

 ;WITH cteCallEvents As
 (
        SELECT *, CallStart As EventTime, 1 As EventType FROM #rg r
    UNION ALL
        SELECT *, CallEnd   As EventTime, 0 As EventType FROM #rg r
 )
 , cteCallCounts As
 (
    SELECT *,
        ROW_NUMBER() OVER(Order By EventTime) as EventCount,
        ROW_NUMBER() OVER(Partition By EventType Order By EventTime) as TypeCount
    FROM cteCallEvents
 )
 SELECT *,
    2*TypeCount - EventCount  As OpenCalls
FROM    cteCallCounts
WHERE   EventType = 1

It should take a couple of seconds at most. Should work on any SQL Server 2005+.

like image 58
RBarryYoung Avatar answered Sep 28 '22 20:09

RBarryYoung