se me ocurre que puedes hacer esto:
Código SQL:
Ver originalCREATE TABLE #temp
(
id INT,
fecha datetime,
estado VARCHAR(20),
rn INT IDENTITY(1,1)
)
INSERT INTO #temp VALUES (1,'01-01-2013 08:00','inicio')
INSERT INTO #temp VALUES (1,'01-01-2013 10:00','fin')
INSERT INTO #temp VALUES (1,'01-01-2013 13:00','inicio')
INSERT INTO #temp VALUES (1,'01-01-2013 13:30','fin')
INSERT INTO #temp VALUES (1,'01-01-2013 13:40','fin')
INSERT INTO #temp VALUES (1,'01-01-2013 14:00','inicio')
INSERT INTO #temp VALUES (1,'01-01-2013 14:30','inicio')
INSERT INTO #temp VALUES (1,'01-01-2013 15:40','fin')
DECLARE @x INT
DECLARE @resultado TABLE (inicio datetime,fin datetime, horas INT)
DECLARE @inicio datetime
DECLARE @fin datetime
DECLARE @horas INT
DECLARE @STATUS VARCHAR(20)
DECLARE @flag INT
SET @x=1
SET @flag=0
while @x<=(SELECT COUNT(*) FROM #temp)
BEGIN
IF ((SELECT estado FROM #temp WHERE rn=@x)='inicio' AND @flag=0)
BEGIN
SELECT @inicio=fecha FROM #temp WHERE rn=@x
SET @flag=1
END
IF(SELECT estado FROM #temp WHERE rn=@x)='fin'
BEGIN
IF( ((SELECT estado FROM #temp WHERE rn=@x+1)='Inicio') OR (@x=(SELECT COUNT(*) FROM #temp)) )
BEGIN
SELECT @fin=fecha FROM #temp WHERE rn=@x
SET @horas=datediff(hh,@inicio,@fin)
INSERT INTO @resultado VALUES (@inicio,@fin,@horas)
SET @flag=0
END
END
SET @x=@x+1
END
SELECT * FROM @resultado
Con un query sencillo veo muy complejo que puedas hacer lo que necesitas :P