Sql server 2008 如何计算最大来电峰值?
以下是数据库的一部分:Sql server 2008 如何计算最大来电峰值?,sql-server-2008,tsql,datetime,date-range,Sql Server 2008,Tsql,Datetime,Date Range,以下是数据库的一部分: 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 2
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
在这个db中,我想计算最大呼叫峰值。换句话说,在同一时间发生的最大呼叫数。我在呼叫中心工作,我会用这些记录生成一份报告。SessionID=24表示传入呼叫。任何建议、线索或计算方法都会对我有用。听起来在这种情况下,您需要一个数字表来加入会话活动的秒数。此表必须设置为您能够查询的最大时间长度(以秒为单位) 使用这样的表,您可以编写如下查询:
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个电话:当然是其中的一个
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.000
2012-10-16 01:01:48.000
2012-10-16 01:01:19.000
2012-10-16 01:01:20.000当通话开始时,通话次数会增加。通话结束时,通话次数会减少。所以
;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
这个样本数据的期望结果是什么?我想要最大呼叫峰值的计数。。。。因此,对于这个示例数据,结果将是:谢谢你,卢斯卡。你也能看看这个问题吗?