none
Sumatoria de horas de tiempo en paro de campos Datetime RRS feed

  • Pregunta

  • Buenas tardes chicos.

    Les comento lo que estoy intentando hacer, tengo la siguiente consulta:

    SELECT O.EQUIPO, O.TITULO,(O.MINUTOS/60) AS HORAS, (O.Minutos%60) AS MINUTOS 
    FROM 
    (
    SELECT d.ALTA
    	 , d2.EQUIPO
    	 , d2.TITULO
    	 , SUM(DATEDIFF(MINUTE, D.ALTA,D.ULTIMAACTUALIZACION)) AS Minutos
    FROM
        dbo.M_OT d
        INNER JOIN dbo.M_OTPARTIDAS d1 ON (d.OT=d1.OT)
        INNER JOIN dbo.M_EQUIPO d2 ON (d1.EQUIPO=d2.EQUIPO)
        INNER JOIN dbo.M_PP4M d4 ON (d.OT=d4.OT)
        INNER JOIN dbo.M_EMPLEADO d3 ON (d4.CODIGO=d3.CODIGO)
    	INNER JOIN dbo.usuario d5 ON (d.USERALTA=d5.Clave)
    WHERE CAST(D.ALTA AS DATE) BETWEEN '20200201' AND '20200228' AND d2.EQUIPO='AMU-027'
    GROUP BY d.ALTA,d2.EQUIPO, d2.TITULO
    ) AS O

    Esta consulta me ayudó a realizarla otro compañero de aquí del foro, con esta tengo los registros partida a partida en un período de fechas especificado y de un equipo en especial.

    Aquí me muestra de la siguiente forma:

    Ahora lo que necesito hacer es una sumatoria del tiempo total del paro de la máquina a consultar en un período de tiempo.

    Lo que intenté en la consulta anterior fue lo siguiente:

    SELECT O.EQUIPO, O.TITULO,SUM(O.MINUTOS/60) AS HORAS, SUM(O.Minutos%60) AS MINUTOS 
    FROM 
    (
    SELECT d.ALTA
    	 , d2.EQUIPO
    	 , d2.TITULO
    	 , SUM(DATEDIFF(MINUTE, D.ALTA,D.ULTIMAACTUALIZACION)) AS Minutos
    FROM
        dbo.M_OT d
        INNER JOIN dbo.M_OTPARTIDAS d1 ON (d.OT=d1.OT)
        INNER JOIN dbo.M_EQUIPO d2 ON (d1.EQUIPO=d2.EQUIPO)
        INNER JOIN dbo.M_PP4M d4 ON (d.OT=d4.OT)
        INNER JOIN dbo.M_EMPLEADO d3 ON (d4.CODIGO=d3.CODIGO)
    	INNER JOIN dbo.usuario d5 ON (d.USERALTA=d5.Clave)
    WHERE CAST(D.ALTA AS DATE) BETWEEN '20200201' AND '20200228' AND d2.EQUIPO='AMU-027'
    GROUP BY d.ALTA,d2.EQUIPO, d2.TITULO
    ) AS O
    GROUP BY O.EQUIPO, O.TITULO

    Pero me muestra la información de la siguiente forma:

    ¿Habrá alguna forma de que al momento que en Minutos sea igual o mayor a 60 se sume 1 a la parte de las horas?

    De antemano muchas gracias por su ayuda y paciencia.

    Saludos.

    jueves, 18 de junio de 2020 17:10

Respuestas

  • Hola  

      

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, te comparto el siguiente enlace

    Convertir segundos, minutos, horas, dias

    Gracias por usar los foros de MSDN. 

      

    Andres Aguilar 

     ____________________________ 

      

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. 

    jueves, 18 de junio de 2020 20:14
    Moderador

Todas las respuestas

  • Hola  

      

    Gracias por levantar tu consulta en los foros de MSDN. Con respecto a la misma, te comparto el siguiente enlace

    Convertir segundos, minutos, horas, dias

    Gracias por usar los foros de MSDN. 

      

    Andres Aguilar 

     ____________________________ 

      

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.  

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft.   

    Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft. 

    jueves, 18 de junio de 2020 20:14
    Moderador
  • Buenos días @Andres Aguilar M

    De antemano una disculpa por la demora. Ya intenté utilizar el método que me propones, de esta forma:

    SELECT O.EQUIPO, O.TITULO,
    CONVERT(VARCHAR(12), O.MINUTOS / 60 / 60 / 24) 
    + ':' + CONVERT(VARCHAR(12), O.MINUTOS / 60 / 60 % 24) 
    + ':' + CONVERT(VARCHAR(2), O.MINUTOS / 60 % 60) 
    + ':' + CONVERT(VARCHAR(2), O.MINUTOS % 60) AS ' Day(s) : Hour(s) : Minute(s) : Second(s) '
    FROM 
    (
    SELECT D.OT,d.ALTA
    	 , d2.EQUIPO
    	 , d2.TITULO
    	 , SUM(DATEDIFF(MINUTE, D.ALTA,D.ULTIMAACTUALIZACION)) AS Minutos
    FROM
        dbo.M_OT d
        INNER JOIN dbo.M_OTPARTIDAS d1 ON (d.OT=d1.OT)
        INNER JOIN dbo.M_EQUIPO d2 ON (d1.EQUIPO=d2.EQUIPO)
        INNER JOIN dbo.M_PP4M d4 ON (d.OT=d4.OT)
        INNER JOIN dbo.M_EMPLEADO d3 ON (d4.CODIGO=d3.CODIGO)
    	INNER JOIN dbo.usuario d5 ON (d.USERALTA=d5.Clave)
    WHERE CAST(D.ALTA AS DATE) BETWEEN '20200201' AND '20200228' AND d2.EQUIPO='AMU-027'
    GROUP BY D.OT,d.ALTA,d2.EQUIPO, d2.TITULO
    ) AS O
    GROUP BY O.EQUIPO, O.TITULO,O.MINUTOS

    Pero me da el resultado de esta forma:

    Cuando los datos correctos son:

    Estos datos con el código inicial.

    Lo que ando buscando hacer es sumar el tiempo de todas las partidas y mostrarlo en solo 1 resultado (una suma general)

    Partida 1 - 2 horas 14 minutos

    Partida 2 - 0 horas 12 minutos

    Partida 3 - 1 horas 16 minutos

    Partida 4 - 0 horas 53 minutos

    Total de Partidas - 4 horas 35 minutos

    Y con una sumatoria en el anterior código me sale de la siguiente forma:

    SELECT O.EQUIPO, O.TITULO,SUM(O.MINUTOS/60) AS HORAS, SUM(O.Minutos%60) AS MINUTOS 
    FROM 
    (
    SELECT d.ALTA
    	 , d2.EQUIPO
    	 , d2.TITULO
    	 , SUM(DATEDIFF(MINUTE, D.ALTA,D.ULTIMAACTUALIZACION)) AS Minutos
    FROM
        dbo.M_OT d
        INNER JOIN dbo.M_OTPARTIDAS d1 ON (d.OT=d1.OT)
        INNER JOIN dbo.M_EQUIPO d2 ON (d1.EQUIPO=d2.EQUIPO)
        INNER JOIN dbo.M_PP4M d4 ON (d.OT=d4.OT)
        INNER JOIN dbo.M_EMPLEADO d3 ON (d4.CODIGO=d3.CODIGO)
    	INNER JOIN dbo.usuario d5 ON (d.USERALTA=d5.Clave)
    WHERE CAST(D.ALTA AS DATE) BETWEEN '20200201' AND '20200228' AND d2.EQUIPO='AMU-027'
    GROUP BY d.ALTA,d2.EQUIPO, d2.TITULO
    ) AS O
    GROUP BY O.EQUIPO, O.TITULO

    Mi pregunta en sí es ¿cómo puedo sumar el total de las horas y minutos de todas las partidas en común para que me aparezca de la forma del Total de Partidas?

    De antemano gracias.

    Saludos.

    viernes, 19 de junio de 2020 14:23
  • Encontré cómo solucionarlo, en ves de batallar directamente con el código en DB, mejor hice la función en el Reporteador (en el sistema donde voy a plasmar la información) y allí pude hacerlo más sencillo :)

    De igual forma muchas gracias a todos por su ayuda y tiempo.

    Saludos.

    sábado, 20 de junio de 2020 16:52