如何计算最大传入呼叫高峰?(How to calculate Maximum incoming Ca

2019-10-30 06:02发布

这里是数据库的一部分:

SessionID    SessionStartTime              SessionCloseTime
24       2012-10-16 01:00:06.000           2012-10-16 01:01:22.000
24       2012-10-16 01:00:08.000           2012-10-16 01:01:10.000
24       2012-10-16 01:00:16.000           2012-10-16 01:01:12.000
24       2012-10-16 01:00:30.000           2012-10-16 01:01:48.000
24       2012-10-16 01:00:41.000           2012-10-16 01:02:08.000
24       2012-10-16 01:00:48.000           2012-10-16 01:01:34.000
24       2012-10-16 01:00:56.000           2012-10-16 01:03:09.000
24       2012-10-16 01:01:02.000           2012-10-16 01:02:13.000
24       2012-10-16 01:01:05.000           2012-10-16 01:03:16.000
24       2012-10-16 01:01:09.000           2012-10-16 01:02:42.000
24       2012-10-16 01:01:15.000           2012-10-16 01:02:48.000
24       2012-10-16 01:01:18.000           2012-10-16 01:02:14.000
24       2012-10-16 01:01:18.000           2012-10-16 01:02:06.000
24       2012-10-16 01:01:42.000           2012-10-16 01:03:16.000
24       2012-10-16 01:01:45.000           2012-10-16 01:03:04.000

在这个数据库,我想计算最大callpeaks。 换句话说,最大程度有多大要求在同一时间发生。 我在呼叫中心工作,我会产生这些记录的报告。 的SessionID = 24表示来电。 任何建议,线索或计算方法将是我有用的。

Answer 1:

当呼叫开始,呼叫的数量增加。 当通话结束后,电话的数量减少。 所以...

;with cte as
(
    select SessionStartTime as changetime,1 as CC from yourtable
    union all
    select SessionCloseTime,-1 from yourtable
)
    select top 1 changetime,rt from
    (
    select * from cte
        cross apply 
        (select SUM(cc) as rt from cte c where c.changetime<=cte.changetime) rt         
    ) v
    order by rt desc


Answer 2:

听起来像是你需要一个数字表在这种情况下加入了秒的会议还活着的量。 此表必须设置在几秒钟内,你将能够查询的最大时间长度。

有了这样一个表,你可以写这样的查询:

CREATE TABLE Numbers 
( 
    Number INT IDENTITY(1,1) PRIMARY KEY CLUSTERED 
) 

WHILE COALESCE(SCOPE_IDENTITY(), 0) <= 1000000
BEGIN 
    INSERT #Numbers DEFAULT VALUES 
END

CREATE TABLE #Calls
(
    SessionID int,
    SessionStartTime datetime,
    SessionCloseTime datetime
)


INSERT INTO #Calls VALUES (24, '2012-10-16 01:00:06.000', '2012-10-16 01:01:22.000')
INSERT INTO #Calls VALUES (24, '2012-10-16 01:00:08.000', '2012-10-16 01:01:10.000')
INSERT INTO #Calls VALUES (24, '2012-10-16 01:00:16.000', '2012-10-16 01:01:12.000')
INSERT INTO #Calls VALUES (24, '2012-10-16 01:00:30.000', '2012-10-16 01:01:48.000')
INSERT INTO #Calls VALUES (24, '2012-10-16 01:00:41.000', '2012-10-16 01:02:08.000')
INSERT INTO #Calls VALUES (24, '2012-10-16 01:00:48.000', '2012-10-16 01:01:34.000')
INSERT INTO #Calls VALUES (24, '2012-10-16 01:00:56.000', '2012-10-16 01:03:09.000')
INSERT INTO #Calls VALUES (24, '2012-10-16 01:01:02.000', '2012-10-16 01:02:13.000')
INSERT INTO #Calls VALUES (24, '2012-10-16 01:01:05.000', '2012-10-16 01:03:16.000')
INSERT INTO #Calls VALUES (24, '2012-10-16 01:01:09.000', '2012-10-16 01:02:42.000')
INSERT INTO #Calls VALUES (24, '2012-10-16 01:01:15.000', '2012-10-16 01:02:48.000')
INSERT INTO #Calls VALUES (24, '2012-10-16 01:01:18.000', '2012-10-16 01:02:14.000')
INSERT INTO #Calls VALUES (24, '2012-10-16 01:01:18.000', '2012-10-16 01:02:06.000')
INSERT INTO #Calls VALUES (24, '2012-10-16 01:01:42.000', '2012-10-16 01:03:16.000')
INSERT INTO #Calls VALUES (24, '2012-10-16 01:01:45.000', '2012-10-16 01:03:04.000')


SELECT TOP 1 DATEADD(SECOND, Number, SessionStartTime) CallTime, COUNT(C.SessionId) NoOfCalls FROM #Calls C
INNER JOIN #Numbers N ON N.Number <= DATEDIFF(SECOND, C.SessionStartTime, C.SessionCloseTime) --Join number of seconds between start and end time
GROUP BY DATEADD(SECOND, Number, SessionStartTime)
ORDER BY NoOfCalls DESC

该查询给出结果:

在这些时间11个呼叫:(随着ofcourse的这些顶部1的一个)

2012年10月16日01:01:47.000
2012年10月16日01:01:22.000
2012年10月16日01:01:21.000
2012年10月16日01:01:46.0​​00
2012年10月16日01:01:48.000
2012年10月16日01:01:19.000
2012年10月16日01:01:20.000



文章来源: How to calculate Maximum incoming Call Peaks?