【发布时间】:2012-10-13 01:24:04
【问题描述】:
我写了一个程序,它需要 3 个参数 StartDate、EndDate 和 TimeRange。根据 TimeRange,我的程序拆分日期并分别计算它们。这是我的程序:
PROCEDURE [dbo].[Procedure1]
@Start datetime,
@Finish datetime,
@TimeRange time
AS
BEGIN
SET NOCOUNT ON;
declare @TimeRanges as TABLE (SessionStart datetime, SessionEnd datetime);
with TimeRanges as (
select @Start as StartTime, @Start + @TimeRange as EndTime
union all
select StartTime + @TimeRange, EndTime + @TimeRange
from TimeRanges
where EndTime < @Finish )
select StartTime, EndTime, Count( Test.ScenarioID ) as TotalInboundArrivals
from TimeRanges as TR left outer join
dbo.Test as Test on TR.StartTime <= Test.SessionStartTime and Test.SessionCloseTime < TR.EndTime
where Test.ScenarioID = 24
group by TR.StartTime, TR.EndTime
END
例如,
Start Time: 11:00
End Time: 12:00
TimeRange : 05:00
This procudure splits them like
TimeRange TotalCallPeaks
11:00 11:05 12
11:05 11:10 8
11:10 11:15 15
etc..
这是我的问题:我需要同时发生的最大通话次数。换句话说,我需要通话高峰。任何建议或线索对我来说都会非常有用。
在这个时间范围内发生了 6 个调用,但其中 4 个是同时发生的,我想计算一下。最大点显示最大呼叫峰值。在此时间范围内发生了第 5 次和第 6 次调用,但对最大调用峰值没有影响。
【问题讨论】:
-
答案草图 - 将问题分成两部分。对于第一部分,您想计算出任何有趣时间的同时通话数量 - 在这种情况下,有趣的时间是通话开始时(因为通话数量刚刚增加)。对于每个有趣的时间,计算出当时的活跃呼叫数。 然后,对于每个间隔,计算出该时间段内该值的最大值(还包括该时间段开始之前或之后的最新值)。
标签: sql-server tsql datetime stored-procedures date-range