Code:
IF EXISTS (SELECT * FROM sysobjects WHERE id = OBJECT_ID('dbo.LindsaysProc') AND OBJECTPROPERTY(id, 'IsProcedure') = 1) DROP PROCEDURE dbo.LindsaysProc GO CREATE PROCEDURE dbo.LindsaysProc AS IF not EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID('Lindsay') AND OBJECTPROPERTY(id, 'IsUserTable') = 1) begin -- create table create table Lindsay ( DateTimeRecord Datetime PRIMARY KEY CLUSTERED, Result int, ) create index Lindsay_Idx on Lindsay(Result) -- populate it with data insert into Lindsay values('2009-07-13 00:00:00', 1) insert into Lindsay values('2009-07-13 00:00:01', 2) insert into Lindsay values('2009-07-13 00:00:02', 4) insert into Lindsay values('2009-07-13 00:00:03', -8888) insert into Lindsay values('2009-07-13 00:00:04', 2) insert into Lindsay values('2009-07-13 00:00:05', 5) insert into Lindsay values('2009-07-13 00:00:06', 6) insert into Lindsay values('2009-07-13 00:00:07', -8888) insert into Lindsay values('2009-07-13 00:00:08', -8888) insert into Lindsay values('2009-07-13 00:00:09', 2) insert into Lindsay values('2009-07-13 00:00:10', 2) insert into Lindsay values('2009-07-13 00:00:11', -8888) insert into Lindsay values('2009-07-13 00:00:12', -8888) insert into Lindsay values('2009-07-13 00:00:13', -8888) insert into Lindsay values('2009-07-13 00:00:14', 2) insert into Lindsay values('2009-07-13 00:00:15', 2) insert into Lindsay values('2009-07-13 00:00:16', 2) insert into Lindsay values('2009-07-13 00:00:17', 2) insert into Lindsay values('2009-07-13 00:00:18', 2) insert into Lindsay values('2009-07-13 00:00:19', 2) insert into Lindsay values('2009-07-13 00:00:20', 2) insert into Lindsay values('2009-07-13 00:00:21', 2) insert into Lindsay values('2009-07-13 00:00:22', -8888) end -- create temp table for result create table #tmpLindsay ( BeginnningDateTime Datetime, EndingDateTime Datetime ) declare @dt datetime, @value int, @b datetime, @e datetime, @i bit declare l cursor for select * from Lindsay order by DateTimeRecord open l fetch next from l into @dt, @value while @@fetch_status=0 begin if @value = -8888 begin if @i = 0 begin set @i = 1 set @b = @dt set @e = @dt end else set @e = @dt end else begin if (@i = 1) begin insert into #tmpLindsay values(@b, @e) set @b = null set @e = null end set @i = 0 end fetch next from l into @dt, @value end close l deallocate l select CONVERT(VARCHAR, BeginnningDateTime,120) + ' - ' + CONVERT(VARCHAR, EndingDateTime,120) from #tmpLindsay drop table #tmpLindsay
The result is displayed when you execute
exec LindsaysProc
Peter Redei
Leave a comment: