Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Sumar horas con criterio en común

Estas en el tema de Sumar horas con criterio en común en el foro de SQL Server en Foros del Web. Estimados, Nuevamente recurro al foro para poder solucionar un problemita, sucede que tengo una tabla en SQL como muestro a continuacion: NOMBRE_ESTACION TOTAL_HORAS S_YOMBLON 00:04:55 ...
  #1 (permalink)  
Antiguo 14/08/2014, 14:49
 
Fecha de Ingreso: febrero-2013
Ubicación: Lima
Mensajes: 301
Antigüedad: 11 años, 2 meses
Puntos: 5
Exclamación Sumar horas con criterio en común

Estimados,

Nuevamente recurro al foro para poder solucionar un problemita, sucede que tengo una tabla en SQL como muestro a continuacion:

NOMBRE_ESTACION TOTAL_HORAS
S_YOMBLON 00:04:55
S_YOMBLON 01:16:55
S_YOMBLON 07:10:15
S_YOMBLON 07:12:45
S_YOMBLON 07:24:30
S_YOMBLON 07:29:38
S_YOMBLON 07:31:58
S_YOMBLON 07:34:50
S_YOMBLON 07:41:30

Lo que necesitaria es poder mostrar solamente 1 registro, que me muestre la suma del total de las horas, es esto posible...?
__________________
Lo que no se....tampoco creo saberlo....
  #2 (permalink)  
Antiguo 14/08/2014, 15:16
Avatar de 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: Sumar horas con criterio en comun

Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. campo1 VARCHAR(20),
  4. campo2 VARCHAR(20)
  5. )
  6.  
  7. INSERT INTO #temp VALUES ('S_YOMBLON','00:04:55')
  8. INSERT INTO #temp VALUES ('S_YOMBLON','01:16:55')
  9. INSERT INTO #temp VALUES ('S_YOMBLON','07:10:15')
  10. INSERT INTO #temp VALUES ('S_YOMBLON','07:12:45')
  11. INSERT INTO #temp VALUES ('S_YOMBLON','07:24:30')
  12. INSERT INTO #temp VALUES ('S_YOMBLON','07:29:38')
  13. INSERT INTO #temp VALUES ('S_YOMBLON','07:31:58')
  14. INSERT INTO #temp VALUES ('S_YOMBLON','07:34:50')
  15. INSERT INTO #temp VALUES ('S_YOMBLON','07:41:30')
  16.  
  17.  
  18. SELECT campo1,
  19.     RIGHT(100+SUM(CAST(PARSENAME(REPLACE(campo2,':','.'),3) AS INT))
  20.            +SUM((CAST(PARSENAME(REPLACE(campo2,':','.'),2) AS INT)
  21.            +CAST(PARSENAME(REPLACE(campo2,':','.'),1) AS INT)))/60,2)
  22.     +':'
  23.     +RIGHT(100+SUM((CAST(PARSENAME(REPLACE(campo2,':','.'),2) AS INT)
  24.            +CAST(PARSENAME(REPLACE(campo2,':','.'),1) AS INT)))%60,2)
  25.     +':'
  26.     +RIGHT(100+SUM(CAST(PARSENAME(REPLACE(campo2,':','.'),1) AS INT))%60,2)
  27. FROM #temp GROUP BY campo1

Busquele en google:
http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=121027
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 14/08/2014, 15:45
 
Fecha de Ingreso: febrero-2013
Ubicación: Lima
Mensajes: 301
Antigüedad: 11 años, 2 meses
Puntos: 5
Respuesta: Sumar horas con criterio en comun

Gracias libras....estaba buscando por la red...pero no habia visto ese post.... :)
__________________
Lo que no se....tampoco creo saberlo....
  #4 (permalink)  
Antiguo 14/08/2014, 16:03
 
Fecha de Ingreso: febrero-2013
Ubicación: Lima
Mensajes: 301
Antigüedad: 11 años, 2 meses
Puntos: 5
Respuesta: Sumar horas con criterio en comun

Libras, estuve revisando el codigo, al parecer no realiza el calculo de manera correcta, por ejemplo con estos datos:

SITE HOUR
S_YOMBLON 08:25:15
S_YOMBLON 07:58:30
S_YOMBLON 07:55:00
S_YOMBLON 07:45:25
S_YOMBLON 07:34:50
S_YOMBLON 07:24:30
S_YOMBLON 08:09:45
S_YOMBLON 07:29:38
S_YOMBLON 08:50:20
S_YOMBLON 08:26:40
S_YOMBLON 10:00:43
S_YOMBLON 09:50:50
S_YOMBLON 08:12:35
S_YOMBLON 07:54:17
S_YOMBLON 07:55:50
S_YOMBLON 07:43:00
S_YOMBLON 00:04:55
S_YOMBLON 09:16:25
S_YOMBLON 08:49:35
S_YOMBLON 09:13:43
S_YOMBLON 08:12:15
S_YOMBLON 08:10:35
S_YOMBLON 09:44:37
S_YOMBLON 08:24:15
S_YOMBLON 01:16:55
S_YOMBLON 07:43:25
S_YOMBLON 07:56:28
S_YOMBLON 07:41:30
S_YOMBLON 07:10:15
S_YOMBLON 07:12:45
S_YOMBLON 08:14:55
S_YOMBLON 07:31:58

La suma simple (realizado en excel) debe salir 248:21:28 horas, pero en el codigo SQL sale 65:43:39...podrias indicarme que es lo que esta mal...?
__________________
Lo que no se....tampoco creo saberlo....
  #5 (permalink)  
Antiguo 14/08/2014, 16:37
Avatar de 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: Sumar horas con criterio en comun

el query es lo que esta mal....porque...investigale un poquito.....que por hoy cierro el changarro ;)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #6 (permalink)  
Antiguo 15/08/2014, 07:49
Avatar de 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: Sumar horas con criterio en comun

Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. campo1 VARCHAR(20),
  4. campo2 TIME--varchar(20)
  5. )
  6.  
  7. INSERT INTO #temp VALUES ('S_YOMBLON','08:25:15')
  8. INSERT INTO #temp VALUES ('S_YOMBLON','07:58:30')
  9. INSERT INTO #temp VALUES ('S_YOMBLON','07:55:00')
  10. INSERT INTO #temp VALUES ('S_YOMBLON','07:45:25')
  11. INSERT INTO #temp VALUES ('S_YOMBLON','07:34:50')
  12. INSERT INTO #temp VALUES ('S_YOMBLON','07:24:30')
  13. INSERT INTO #temp VALUES ('S_YOMBLON','08:09:45')
  14. INSERT INTO #temp VALUES ('S_YOMBLON','07:29:38')
  15. INSERT INTO #temp VALUES ('S_YOMBLON','08:50:20')
  16. INSERT INTO #temp VALUES ('S_YOMBLON','08:26:40')
  17. INSERT INTO #temp VALUES ('S_YOMBLON','10:00:43')
  18. INSERT INTO #temp VALUES ('S_YOMBLON','09:50:50')
  19. INSERT INTO #temp VALUES ('S_YOMBLON','08:12:35')
  20. INSERT INTO #temp VALUES ('S_YOMBLON','07:54:17')
  21. INSERT INTO #temp VALUES ('S_YOMBLON','07:55:50')
  22. INSERT INTO #temp VALUES ('S_YOMBLON','07:43:00')
  23. INSERT INTO #temp VALUES ('S_YOMBLON','00:04:55')
  24. INSERT INTO #temp VALUES ('S_YOMBLON','09:16:25')
  25. INSERT INTO #temp VALUES ('S_YOMBLON','08:49:35')
  26. INSERT INTO #temp VALUES ('S_YOMBLON','09:13:43')
  27. INSERT INTO #temp VALUES ('S_YOMBLON','08:12:15')
  28. INSERT INTO #temp VALUES ('S_YOMBLON','08:10:35')
  29. INSERT INTO #temp VALUES ('S_YOMBLON','09:44:37')
  30. INSERT INTO #temp VALUES ('S_YOMBLON','08:24:15')
  31. INSERT INTO #temp VALUES ('S_YOMBLON','01:16:55')
  32. INSERT INTO #temp VALUES ('S_YOMBLON','07:43:25')
  33. INSERT INTO #temp VALUES ('S_YOMBLON','07:56:28')
  34. INSERT INTO #temp VALUES ('S_YOMBLON','07:41:30')
  35. INSERT INTO #temp VALUES ('S_YOMBLON','07:10:15')
  36. INSERT INTO #temp VALUES ('S_YOMBLON','07:12:45')
  37. INSERT INTO #temp VALUES ('S_YOMBLON','08:14:55')
  38. INSERT INTO #temp VALUES ('S_YOMBLON','07:31:58')
  39.  
  40.  
  41. SELECT CAST(HVal AS VARCHAR(10))+':'+RIGHT(MVal+100, 2)+':'+RIGHT(SVal+100, 2)
  42. FROM
  43. (
  44. SELECT H.Val AS hval, M.Val AS mval, S.Val AS sval
  45. FROM (
  46.        --Your query goes here
  47.        SELECT dateadd(SECOND, SUM(datediff(SECOND, 0, campo2)), 0) AS sumtime
  48.        FROM #temp
  49.      ) AS T
  50.   CROSS apply (SELECT datedifF(HOUR, 0, T.sumTime)) AS H(Val)
  51.   CROSS apply (SELECT datediff(MINUTE, 0, dateadd(HOUR, -H.Val, T.sumTime))) AS M(Val)
  52.   CROSS apply (SELECT datediff(SECOND, 0, dateadd(HOUR, -H.Val, dateadd(MINUTE, -M.Val, T.sumTime)))) AS S(Val)
  53.  
  54. ) AS t1

este da otro aproach
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 15/08/2014, 09:52
 
Fecha de Ingreso: febrero-2013
Ubicación: Lima
Mensajes: 301
Antigüedad: 11 años, 2 meses
Puntos: 5
Respuesta: Sumar horas con criterio en comun

Libras, que tal...encontre otra manera de hacerlo...
Código SQL:
Ver original
  1. SELECT CAST(SUM(DATEDIFF(SECOND,0,campo2))/3600 AS VARCHAR(12)) +
  2. ':' + RIGHT('0' + CAST(SUM(DATEDIFF(SECOND,0,campo2))/60%60 AS VARCHAR(2)),2) +
  3. ':' + RIGHT('0' + CAST(SUM(DATEDIFF(SECOND,0,campo2))%60 AS VARCHAR(2)),2)TOTAL_HORAS
  4. FROM #temp

Pero el problema es que no puedo ordenarlo ni descendente ni ascendente, o mejor dicho si lo hace, pero no los valores mas altos arriba o abajo segun correspondan....
__________________
Lo que no se....tampoco creo saberlo....
  #8 (permalink)  
Antiguo 15/08/2014, 10:31
Avatar de 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: Sumar horas con criterio en comun

da el mismo resultado que el que te puse anteriormente, ahora ordenarlo??? con un rder by no?? o con un

Código SQL:
Ver original
  1. SELECT * FROM(
  2. SELECT CAST(SUM(DATEDIFF(SECOND,0,campo2))/3600 AS VARCHAR(12)) +
  3. ':' + RIGHT('0' + CAST(SUM(DATEDIFF(SECOND,0,campo2))/60%60 AS VARCHAR(2)),2) +
  4. ':' + RIGHT('0' + CAST(SUM(DATEDIFF(SECOND,0,campo2))%60 AS VARCHAR(2)),2)TOTAL_HORAS
  5. FROM #temp
  6. ) AS t1 ORDER BY CONVERT(TIME,total_horas) DESC
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 15/08/2014, 10:35
 
Fecha de Ingreso: febrero-2013
Ubicación: Lima
Mensajes: 301
Antigüedad: 11 años, 2 meses
Puntos: 5
Respuesta: Sumar horas con criterio en comun

Claro, da el mismo resultado...jejeje
Por otro lado, el "Order By ..." no funciona, hago la conversion pero muestra error por el tipo de dato, ya que el "TOTAL_HORAS" esta como nvarchar.... en ese caso, tendria que armar la hora y convertirlo...? o hay alguna otra manera...? o por ultimo...no estoy considerando algo...?
__________________
Lo que no se....tampoco creo saberlo....
  #10 (permalink)  
Antiguo 15/08/2014, 10:40
Avatar de 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: Sumar horas con criterio en comun

dime cual es tu resultado??? y porque lo quieres ordenado???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #11 (permalink)  
Antiguo 15/08/2014, 10:46
 
Fecha de Ingreso: febrero-2013
Ubicación: Lima
Mensajes: 301
Antigüedad: 11 años, 2 meses
Puntos: 5
Respuesta: Sumar horas con criterio en comun

El resultado da el mismo, que es la suma total de horas por nombres, y quiero ordenarlo para que sea un poco mas facil obtener todos los registros que tengan la suma de horas mayores a 10, es decir mayores a 10:00:00....me explique bien...?
__________________
Lo que no se....tampoco creo saberlo....
  #12 (permalink)  
Antiguo 15/08/2014, 11:04
Avatar de 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: Sumar horas con criterio en comun

sip puedes hacer un substring para que te traiga el valor antes de los primeros ":" y ese valor lo conviertes a entero y ordenas por ese campo y sorpresa, tienes tu tabla ordenada ;)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #13 (permalink)  
Antiguo 19/08/2014, 14:34
 
Fecha de Ingreso: febrero-2013
Ubicación: Lima
Mensajes: 301
Antigüedad: 11 años, 2 meses
Puntos: 5
Respuesta: Sumar horas con criterio en común

Efectivamente libras, lo que hice fue convertir toda la columna hora a segundos, y luego realice el ordenamiento correspondiente....Gracias....!!!
__________________
Lo que no se....tampoco creo saberlo....

Etiquetas: comun, horas, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:35.