Ver Mensaje Individual
  #6 (permalink)  
Antiguo 22/10/2013, 10:32
Avatar de Libras
Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Consulta SQL resta de 2 fechas en el mismo campo en distinto registro. (co

se me ocurre que puedes hacer esto:

Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. id INT,
  4. fecha datetime,
  5. estado VARCHAR(20),
  6. rn INT IDENTITY(1,1)
  7. )
  8.  
  9.  
  10.  
  11. INSERT INTO #temp VALUES (1,'01-01-2013 08:00','inicio')
  12.  
  13. INSERT INTO #temp VALUES (1,'01-01-2013 10:00','fin')
  14.  
  15. INSERT INTO #temp VALUES (1,'01-01-2013 13:00','inicio')
  16.  
  17. INSERT INTO #temp VALUES (1,'01-01-2013 13:30','fin')
  18.  
  19. INSERT INTO #temp VALUES (1,'01-01-2013 13:40','fin')
  20.  
  21. INSERT INTO #temp VALUES (1,'01-01-2013 14:00','inicio')
  22.  
  23. INSERT INTO #temp VALUES (1,'01-01-2013 14:30','inicio')
  24.  
  25. INSERT INTO #temp VALUES (1,'01-01-2013 15:40','fin')
  26.  
  27.  
  28.  
  29. DECLARE @x INT
  30. DECLARE @resultado TABLE (inicio datetime,fin datetime, horas INT)
  31. DECLARE @inicio datetime
  32. DECLARE @fin datetime
  33. DECLARE @horas INT
  34. DECLARE @STATUS VARCHAR(20)
  35. DECLARE @flag INT
  36. SET @x=1
  37. SET @flag=0
  38. while @x<=(SELECT COUNT(*) FROM #temp)
  39. BEGIN
  40.  
  41. IF ((SELECT estado FROM #temp WHERE rn=@x)='inicio' AND @flag=0)
  42. BEGIN
  43.     SELECT @inicio=fecha FROM #temp WHERE rn=@x
  44.     SET @flag=1
  45. END
  46. IF(SELECT estado FROM #temp WHERE rn=@x)='fin'
  47.     BEGIN
  48.         IF( ((SELECT estado FROM #temp WHERE rn=@x+1)='Inicio') OR (@x=(SELECT COUNT(*) FROM #temp))  )
  49.         BEGIN          
  50.             SELECT @fin=fecha FROM #temp WHERE rn=@x
  51.             SET @horas=datediff(hh,@inicio,@fin)
  52.             INSERT INTO @resultado VALUES (@inicio,@fin,@horas)
  53.             SET @flag=0
  54.         END
  55.     END
  56.  
  57. SET @x=@x+1
  58. END
  59. SELECT * FROM @resultado

Con un query sencillo veo muy complejo que puedas hacer lo que necesitas :P
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me