您可以使用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));
這裏有一個小提琴:http://sqlfiddle.com/#!3/ee6f9/1/0
如果間隔不能整齊劃分開始時間和結束時間之間的時間段,您想要做什麼? (例如,上面的例子,但Interval = 13) - 其中一個間隔較短(第一個,最後一個?),或者您是否超出開始/結束以保持所有間隔的長度相同? –
您是否會針對跨越多天的大量數據運行此操作,還是通常只針對一天運行?如果它每天都運行,但有大量的記錄,我想構建一個臨時表,其中包含間隔開始日期和結束日期,然後您在主查詢中加入的臨時表將是最有效的。 –