您可以確定時間範圍正是如此:
declare @StartTime as DateTime = '10-02-2012 10:00'
declare @EndTime as DateTime ='10-02-2012 11:00'
declare @TimeRange as Time = '00:05:00.000'
; with TimeRanges as (
select @StartTime as StartTime, @StartTime + @TimeRange as EndTime
union all
select StartTime + @TimeRange, EndTime + @TimeRange
from TimeRanges
where EndTime < @EndTime) -- Corrected.
select StartTime, EndTime
from TimeRanges
加入範圍與樣本數據來獲得摘要:
declare @StartTime as DateTime = '10-02-2012 10:00'
declare @EndTime as DateTime ='10-02-2012 11:00'
declare @TimeRange as Time = '00:05:00.000'
declare @Samples as Table (SampleId Int Identity, SampleTime DateTime)
insert into @Samples (SampleTime) values
('10-02-2012 9:00'), ('10-02-2012 10:00'), ('10-02-2012 10:02'), ('10-02-2012 10:02'),
('10-02-2012 10:05'), ('10-02-2012 10:20'), ('10-02-2012 10:34'), ('10-02-2012 11:30')
; with TimeRanges as (
select @StartTime as StartTime, @StartTime + @TimeRange as EndTime
union all
select StartTime + @TimeRange, EndTime + @TimeRange
from TimeRanges
where EndTime < @EndTime) -- Corrected.
select StartTime, EndTime, Count(S.SampleId) as Samples
from TimeRanges as TR left outer join
@Samples as S on TR.StartTime <= S.SampleTime and S.SampleTime < TR.EndTime
group by TR.StartTime, TR.EndTime
這正是我想要的。謝謝 – cihata87
但這裏有一個問題。當我的結束時間是11:00時,程序不會在11:00停止,最後一行是在11點和11點05分之間?我們如何解決這個問題? – cihata87
@ cihata87 - 對不起。我已經糾正了遞歸終止檢查。 – HABO