В sybase sql примерно так, в sql-сервере вам может потребоваться внести некоторые изменения, но не намного:)
create procedure Test @startDay varchar(8), @endDay varchar(8)
as
declare @ocurrence int
declare @numberOfDays int
select @numberOfDays = 0
create table #intervals (
interval_hour int,
interval_min_minute int,
interval_max_minute int,
ocurrences int
)
create table #insertions (
hour int,
minute int
)
declare @hour int, @minute int
select @hour = 0
-- create the intervals
while (@hour <> 24)
begin
insert into #intervals values(@hour,0,29,0)
insert into #intervals values(@hour,30,59,0)
select @hour = @hour + 1
end
while(@startDay <> @endDay)
begin
insert into #insertions
select datepart(hh, *yourcolumn*), datepart(mm, *yourcolumn*) from *yourdb..yourtable* where convert(varchar(8), *yourcolumn*, 112) = @startDay
select @startDay = convert(varchar(8), dateadd(dd, 1, convert(datetime, @startDay, 112)), 112)
select @numberOfDays = @numberOfDays + 1
end
declare cursor1 cursor for
select hour, minute from #insertions
open cursor1
fetch cursor1 into @hour, @minute
while (@@sqlstatus=0)
begin
update #intervals
set i.ocurrences = i.ocurrences + 1
from #intervals i
where interval_hour = @hour and @minute between interval_min_minute and interval_max_minute
fetch cursor1 into @hour, @minute
end
close cursor1
select interval_hour 'hour', interval_min_minute 'min minute', interval_max_minute 'max minute', ocurrences,
case when ocurrences > 0 then convert(float, ocurrences) / convert(float, @numberOfDays) else 0 end 'ocurrences average' from #intervals
drop table #intervals
drop table #insertions
go