Sql server TSQL中的日期范围高级计数计算

Sql server TSQL中的日期范围高级计数计算,sql-server,tsql,date-range,Sql Server,Tsql,Date Range,我正在从事呼叫中心项目,我必须在同一时间计算特定时间范围内的呼叫到达量。 我必须写一个有参数StartTime,EndTime和Interval的程序 例如: Start Time: 11:00 End Time: 12:00 Interval: 20 minutes 因此,程序应将1小时的时间范围分为3个部分,每个部分应计算在此范围内开始和完成的到达人数,或开始和尚未完成的到达人数 应该是这样的: 11:00 - 11:20 15 calls at the same time(TimePea

我正在从事呼叫中心项目,我必须在同一时间计算特定时间范围内的呼叫到达量。 我必须写一个有参数StartTime,EndTime和Interval的程序

例如:

Start Time: 11:00
End Time: 12:00
Interval: 20 minutes
因此,程序应将1小时的时间范围分为3个部分,每个部分应计算在此范围内开始和完成的到达人数,或开始和尚未完成的到达人数

应该是这样的:

11:00 - 11:20 15 calls at the same time(TimePeaks)
11:20 - 11:40 21 calls ...
11:40 - 12:00  8 calls ...

有没有关于如何计算它们的建议

您可以使用
日期添加
分组依据
您的时间跨度:

Select Count(*), DateAdd(Minute, @Interval * (DateDiff(Minute, 0, SomeDate) / @Interval), 0)As Part
From #Temp
Where SomeDate Between @StartTime And @EndTime
Group By DateAdd(Minute, @Interval * (DateDiff(Minute, 0, SomeDate) / @Interval), 0)
ORDER BY Part 
样本数据:

declare @StartTime datetime;
declare @EndTime datetime;  
declare @Interval int;
SET @StartTime = Convert(datetime,'2012-10-19 12:00:00',102);
SET @EndTime = Convert(datetime,'2012-10-19 13:00:00',102);
SET @Interval = 20;

create table #Temp(SomeDate datetime);
insert into #Temp values(Convert(datetime,'2012-10-19 12:05:00',102));
insert into #Temp values(Convert(datetime,'2012-10-19 12:06:00',102));
insert into #Temp values(Convert(datetime,'2012-10-19 12:15:00',102));
insert into #Temp values(Convert(datetime,'2012-10-19 12:25:00',102));
insert into #Temp values(Convert(datetime,'2012-10-19 12:45:00',102));
insert into #Temp values(Convert(datetime,'2012-10-19 12:35:00',102));
insert into #Temp values(Convert(datetime,'2012-10-19 12:37:20',102));
insert into #Temp values(Convert(datetime,'2012-10-19 12:15:00',102));
insert into #Temp values(Convert(datetime,'2012-10-19 12:55:00',102));
insert into #Temp values(Convert(datetime,'2012-10-19 12:18:10',102));

这里有一把小提琴:

您可以使用
DATEADD
GROUP BY
您的时间跨度:

Select Count(*), DateAdd(Minute, @Interval * (DateDiff(Minute, 0, SomeDate) / @Interval), 0)As Part
From #Temp
Where SomeDate Between @StartTime And @EndTime
Group By DateAdd(Minute, @Interval * (DateDiff(Minute, 0, SomeDate) / @Interval), 0)
ORDER BY Part 
样本数据:

declare @StartTime datetime;
declare @EndTime datetime;  
declare @Interval int;
SET @StartTime = Convert(datetime,'2012-10-19 12:00:00',102);
SET @EndTime = Convert(datetime,'2012-10-19 13:00:00',102);
SET @Interval = 20;

create table #Temp(SomeDate datetime);
insert into #Temp values(Convert(datetime,'2012-10-19 12:05:00',102));
insert into #Temp values(Convert(datetime,'2012-10-19 12:06:00',102));
insert into #Temp values(Convert(datetime,'2012-10-19 12:15:00',102));
insert into #Temp values(Convert(datetime,'2012-10-19 12:25:00',102));
insert into #Temp values(Convert(datetime,'2012-10-19 12:45:00',102));
insert into #Temp values(Convert(datetime,'2012-10-19 12:35:00',102));
insert into #Temp values(Convert(datetime,'2012-10-19 12:37:20',102));
insert into #Temp values(Convert(datetime,'2012-10-19 12:15:00',102));
insert into #Temp values(Convert(datetime,'2012-10-19 12:55:00',102));
insert into #Temp values(Convert(datetime,'2012-10-19 12:18:10',102));

这里有一把小提琴:

查找1小时前的范围:

DECLARE @iniz VARCHAR(16), @fine VARCHAR(16), @ades VARCHAR(16)
SET @iniz = convert(varchar(16), dateadd(mi,-(60+(datepart(mi,getdate()))), getdate()),120)
SET @fine = convert(varchar(16), dateadd(mi,-(datepart(mi,getdate())), getdate()),120)
SET @ades = convert(varchar(16),Getdate(),120)

PRINT @iniz + ' - ' + @fine + ' - ' + @ades

查找1小时前的范围:

DECLARE @iniz VARCHAR(16), @fine VARCHAR(16), @ades VARCHAR(16)
SET @iniz = convert(varchar(16), dateadd(mi,-(60+(datepart(mi,getdate()))), getdate()),120)
SET @fine = convert(varchar(16), dateadd(mi,-(datepart(mi,getdate())), getdate()),120)
SET @ades = convert(varchar(16),Getdate(),120)

PRINT @iniz + ' - ' + @fine + ' - ' + @ades

如果interval不能很好地划分开始时间和结束时间之间的时间段,您想怎么做?(例如,上面的示例,但间隔=13)-是其中一个间隔较短(第一个、最后一个?),还是扩展到开始/结束之外以保持所有间隔的长度相同?您是针对跨越多天的大型数据集运行此操作,还是通常仅针对一天运行此操作?如果它几乎每天都运行,但是有大量记录,那么我认为构建一个带有间隔开始日期和结束日期的临时表,然后在主查询中加入该表将是最有效的。如果间隔没有整齐地划分开始时间和结束时间之间的时间段,您想做什么?(例如,上面的示例,但间隔=13)-是其中一个间隔较短(第一个、最后一个?),还是扩展到开始/结束之外以保持所有间隔的长度相同?您是针对跨越多天的大型数据集运行此操作,还是通常仅针对一天运行此操作?如果它几乎每天都运行,但是有大量记录,那么我认为构建一个带有间隔开始和结束日期的临时表,然后在主查询中加入该表将是最有效的。谢谢您的回答,但这不是我想要的。让我详细解释一下。开始时间和结束时间是不同的列。我想要在此时间范围内开始和完成的记录数,或已开始但尚未完成的呼叫数。我想要一份关于同时到达的电话的报告谢谢你的回答,但这不是我想要的。让我详细解释一下。开始时间和结束时间是不同的列。我想要在此时间范围内开始和完成的记录数,或已开始但尚未完成的呼叫数。我要一份关于同时接到的电话的报告