none
SQL CONSULTA RRS feed

  • Pregunta

  • Buen día, quiero solicitar ayuda si es posible con lo siguiente, yo tengo una consulta la cual relaciono al final, tengo dos columnas la A.FechaSolic y A.[Fecha de cierre] a raíz de estas dos quisiera saber en horas (teniendo en cuenta que trabajamos de domingo a domingo) cuanto se demoro en cerrar un ticket un analista de mi equipo contando desde el ingreso del ticket (A.FechaSolic) y el cierre del mismo A.[Fecha de cierre], el formato con el que me aparecen estas dos columnas es 2021-01-15 12:36:00.000 (A.FechaSolic) y 2021-01-16 23:39:00.000 (A.[Fecha de cierre]).

    SELECT A.IdTicket, A.Estado, A.FechaSolic, DAY(A.FechaSolic) Dia_Solicitud, datename(MONTH, A.FechaSolic) Mes_Solicitud,
    YEAR (A.FechaSolic) Año_Solicitud, A.[Fecha de cierre], DAY(A.[Fecha de cierre]) Dia_Cierre, datename(MONTH, A.[Fecha de cierre]) Mes_Cierre,
    YEAR (A.[Fecha de cierre]) Año_Cierre, A.UsuarioSolicitudRed, B.Nombre, A.NombreGrupoSolicitud, A.UsuarioCierreRed, C.Analista,
    A.NombreTransaccion, A.CausalEstado, COUNT(*) AS ABONADO, A.Cod_Cliente, A.[Numero Identificación], A.PROCESO, C.ENTRADA, C.OPERACIÓN,
    C.EJECUCION, C.SISTEMA, C.PERIODICIDAD, C.SLA, DAY(A.[FECHA REPORTE]) Dia_Reporte, datename(MONTH, A.[FECHA REPORTE]) Mes_Reporte,
    YEAR (A.[FECHA REPORTE]) Año_Reporte 
    FROM Gestion_Soporte_BO_2021 A
    LEFT JOIN OIM11_ReporteUsuarioYAplicativos B ON A.UsuarioSolicitudRed=B.Login_OIM
    LEFT JOIN Gestion_Soporte_Analista_BO C ON A.NombreTransaccion=C.PROCESO
    GROUP BY A.IdTicket, A. Estado, A.FechaSolic, A.[Fecha de cierre], A.UsuarioSolicitudRed, B.Nombre, A.NombreGrupoSolicitud, A.UsuarioCierreRed,
    C.Analista, A.NombreTransaccion, A.CausalEstado, A.Cod_Cliente, A.[Numero Identificación], A.PROCESO, C.ENTRADA, C.OPERACIÓN, C.EJECUCION, C.SISTEMA,
    C.PERIODICIDAD, C.SLA, A.[FECHA REPORTE]


     
    sábado, 13 de febrero de 2021 20:37

Todas las respuestas

  • Hola CristianSacristan:

    Para ver la diferencia en tiempo, podemos usar la función DateDiff con el parámetro Hour.

    Set dateformat ymd;
    declare @datetime1 datetime;
    declare @datetime2 datetime;
    SEt @datetime1 = '2021-01-15 12:36:00.000';
    Set @datetime2 = '2021-01-16 23:39:00.000';
    
    Select DATEDIFF(hour,@datetime1,@datetime2) as diff,
    @datetime1 as inicial, @datetime2 as final


    Aplicando el mismo principio a tu consulta, por facilidad, puedes utilizar una tabla derivada y de su salida obtener la diferencia en tiempo.

    Select d.*, 
    	DATEDIFF(hour,d.fechasolic,d.[fecha de cierre]) as [diferencia]
    
    from (
    Select a.idticket
    	 , a.estado
    	 , a.fechasolic
    	 , Day(a.fechasolic) As dia_solicitud
    	 , datename(MONTH, a.fechasolic) As mes_solicitud
    	 , Year(a.fechasolic) As año_solicitud
    	 , a.[fecha de cierre]
    	 , Day(a.[fecha de cierre]) As dia_cierre
    	 , datename(MONTH, a.[fecha de cierre]) As mes_cierre
    	 , Year(a.[fecha de cierre]) As año_cierre
    	 , a.usuariosolicitudred
    	 , b.nombre
    	 , a.nombregruposolicitud
    	 , a.usuariocierrered
    	 , c.analista
    	 , a.nombretransaccion
    	 , a.causalestado
    	 , Count(*) As abonado
    	 , a.cod_cliente
    	 , a.[numero identificación]
    	 , a.proceso
    	 , c.entrada
    	 , c.operación
    	 , c.ejecucion
    	 , c.sistema
    	 , c.periodicidad
    	 , c.sla
    	 , Day(a.[fecha reporte]) As dia_reporte
    	 , datename(MONTH, a.[fecha reporte]) As mes_reporte
    	 , Year(a.[fecha reporte]) As año_reporte
    	   From gestion_soporte_bo_2021 As a
    			Left Join oim11_reporteusuarioyaplicativos As b On a.usuariosolicitudred = b.login_oim
    			Left Join gestion_soporte_analista_bo As c On a.nombretransaccion = c.proceso
    	   Group By a.idticket
    			  , a.estado
    			  , a.fechasolic
    			  , a.[fecha de cierre]
    			  , a.usuariosolicitudred
    			  , b.nombre
    			  , a.nombregruposolicitud
    			  , a.usuariocierrered
    			  , c.analista
    			  , a.nombretransaccion
    			  , a.causalestado
    			  , a.cod_cliente
    			  , a.[numero identificación]
    			  , a.proceso
    			  , c.entrada
    			  , c.operación
    			  , c.ejecucion
    			  , c.sistema
    			  , c.periodicidad
    			  , c.sla
    			  , a.[fecha reporte]
    ) as d

    DateDiff

    https://docs.microsoft.com/es-es/sql/t-sql/functions/datediff-transact-sql?view=sql-server-ver15

    Tablas derivadas

    https://javifer2.wordpress.com/2019/11/06/tabla-derivada/

    domingo, 14 de febrero de 2021 6:20
  • Buen día, si duplique esta consulta porque no me di cuenta y cree otro usuario por error.

    La respuesta que me brindaste me funciono, pero quiero preguntarte si esta diferencia se puede obtener con horas y minutos, te pongo un ejemplo, tengo la A.FechaSolic 2021-02-11 21:52:00.000 y la A.[Fecha de cierre] 2021-02-11 23:01:00.000, con la consulta que me ayudaste me sale una diferencia de 2 pero al analizar los dos campos la diferencia seria 1 hora 9 minutos, seria posible obtenerlo así?


    domingo, 14 de febrero de 2021 17:28
  • Hola Cristian 8703:

    Puedes probar algo así:

    Select d.*, 
        Concat(case when  DATEDIFF (Minute, d.fechasolic,d.[fecha de cierre]) % 60 > 0 then DATEDIFF (Hour,   d.fechasolic,d.[fecha de cierre]) - 1 else
        DATEDIFF (Hour,   d.fechasolic,d.[fecha de cierre]) end,' horas ',
        (DATEDIFF (Minute, d.fechasolic,d.[fecha de cierre]) % 60) ,' minutos') as [diferencia]
    from (
    Select a.idticket
    	 , a.estado
    	 , a.fechasolic
    	 , Day(a.fechasolic) As dia_solicitud
    	 , datename(MONTH, a.fechasolic) As mes_solicitud
    	 , Year(a.fechasolic) As año_solicitud
    	 , a.[fecha de cierre]
    	 , Day(a.[fecha de cierre]) As dia_cierre
    	 , datename(MONTH, a.[fecha de cierre]) As mes_cierre
    	 , Year(a.[fecha de cierre]) As año_cierre
    	 , a.usuariosolicitudred
    	 , b.nombre
    	 , a.nombregruposolicitud
    	 , a.usuariocierrered
    	 , c.analista
    	 , a.nombretransaccion
    	 , a.causalestado
    	 , Count(*) As abonado
    	 , a.cod_cliente
    	 , a.[numero identificación]
    	 , a.proceso
    	 , c.entrada
    	 , c.operación
    	 , c.ejecucion
    	 , c.sistema
    	 , c.periodicidad
    	 , c.sla
    	 , Day(a.[fecha reporte]) As dia_reporte
    	 , datename(MONTH, a.[fecha reporte]) As mes_reporte
    	 , Year(a.[fecha reporte]) As año_reporte
    	   From gestion_soporte_bo_2021 As a
    			Left Join oim11_reporteusuarioyaplicativos As b On a.usuariosolicitudred = b.login_oim
    			Left Join gestion_soporte_analista_bo As c On a.nombretransaccion = c.proceso
    	   Group By a.idticket
    			  , a.estado
    			  , a.fechasolic
    			  , a.[fecha de cierre]
    			  , a.usuariosolicitudred
    			  , b.nombre
    			  , a.nombregruposolicitud
    			  , a.usuariocierrered
    			  , c.analista
    			  , a.nombretransaccion
    			  , a.causalestado
    			  , a.cod_cliente
    			  , a.[numero identificación]
    			  , a.proceso
    			  , c.entrada
    			  , c.operación
    			  , c.ejecucion
    			  , c.sistema
    			  , c.periodicidad
    			  , c.sla
    			  , a.[fecha reporte]
    ) as d

    lunes, 15 de febrero de 2021 4:29
  • Buen día, muchas gracias por tu respuesta pero me aparece un error que te relaciono a continuación.

    Msg 195, Level 15, State 10, Line 3
    'Concat' no es un nombre de función integrada reconocido.
    Msg 156, Level 15, State 1, Line 61
    Sintaxis incorrecta cerca de la palabra clave 'as'.
    lunes, 15 de febrero de 2021 17:23
  • Hola Cristian8703:

    Me extraña un poco bastante, puedes ejecutar esta consulta en tú base de datos. Y pégame el resultado please.

    Declare @name sysname;
    set @name  = DB_NAME();
    SELECT compatibility_level , @@VERSION 
    FROM sys.databases WHERE name = @name ;

    Además prueba esto también.

    Select d.*, 
        Concat(case when  DATEDIFF (Minute, d.fechasolic,d.[fecha de cierre]) % 60 > 0 then DATEDIFF (Hour,   d.fechasolic,d.[fecha de cierre]) - 1 else
        DATEDIFF (Hour,   d.fechasolic,d.[fecha de cierre]) end,' horas ',
        (DATEDIFF (Minute, d.fechasolic,d.[fecha de cierre]) % 60) ,' minutos') as [diferencia]
    from (
    	select * from (values (cast('20210101' as datetime),cast('20210101 15:45' as datetime)))t(fechasolic,[fecha de cierre])
    ) as d

    Eso debería de darte algo tal que:

    Luego esto:

    Select d.*, 
       CAST(( case when  DATEDIFF (Minute, d.fechasolic,d.[fecha de cierre]) % 60 > 0 then DATEDIFF (Hour,   d.fechasolic,d.[fecha de cierre]) - 1 else
        DATEDIFF (Hour,   d.fechasolic,d.[fecha de cierre]) end) as varchar(100)) +' horas ' +
        cast(((DATEDIFF (Minute, d.fechasolic,d.[fecha de cierre]) % 60)) as varchar(100)) +' minutos' as [diferencia]
    from (
    	select * from (values (cast('20210101' as datetime),cast('20210101 15:45' as datetime)))t(fechasolic,[fecha de cierre])
    ) as d;

    Qué es la misma query pero utilizando el operador + en vez de la función concat. Y si te funciona:

    Select d.*, 
       CAST(( case when  DATEDIFF (Minute, d.fechasolic,d.[fecha de cierre]) % 60 > 0 then DATEDIFF (Hour,   d.fechasolic,d.[fecha de cierre]) - 1 else
        DATEDIFF (Hour,   d.fechasolic,d.[fecha de cierre]) end) as varchar(100)) +' horas ' +
        cast(((DATEDIFF (Minute, d.fechasolic,d.[fecha de cierre]) % 60)) as varchar(100)) +' minutos' as [diferencia]
    from (
    	Select a.idticket
    	 , a.estado
    	 , a.fechasolic
    	 , Day(a.fechasolic) As dia_solicitud
    	 , datename(MONTH, a.fechasolic) As mes_solicitud
    	 , Year(a.fechasolic) As año_solicitud
    	 , a.[fecha de cierre]
    	 , Day(a.[fecha de cierre]) As dia_cierre
    	 , datename(MONTH, a.[fecha de cierre]) As mes_cierre
    	 , Year(a.[fecha de cierre]) As año_cierre
    	 , a.usuariosolicitudred
    	 , b.nombre
    	 , a.nombregruposolicitud
    	 , a.usuariocierrered
    	 , c.analista
    	 , a.nombretransaccion
    	 , a.causalestado
    	 , Count(*) As abonado
    	 , a.cod_cliente
    	 , a.[numero identificación]
    	 , a.proceso
    	 , c.entrada
    	 , c.operación
    	 , c.ejecucion
    	 , c.sistema
    	 , c.periodicidad
    	 , c.sla
    	 , Day(a.[fecha reporte]) As dia_reporte
    	 , datename(MONTH, a.[fecha reporte]) As mes_reporte
    	 , Year(a.[fecha reporte]) As año_reporte
    	   From gestion_soporte_bo_2021 As a
    			Left Join oim11_reporteusuarioyaplicativos As b On a.usuariosolicitudred = b.login_oim
    			Left Join gestion_soporte_analista_bo As c On a.nombretransaccion = c.proceso
    	   Group By a.idticket
    			  , a.estado
    			  , a.fechasolic
    			  , a.[fecha de cierre]
    			  , a.usuariosolicitudred
    			  , b.nombre
    			  , a.nombregruposolicitud
    			  , a.usuariocierrered
    			  , c.analista
    			  , a.nombretransaccion
    			  , a.causalestado
    			  , a.cod_cliente
    			  , a.[numero identificación]
    			  , a.proceso
    			  , c.entrada
    			  , c.operación
    			  , c.ejecucion
    			  , c.sistema
    			  , c.periodicidad
    			  , c.sla
    			  , a.[fecha reporte]
    ) as d;
    
    
    Pero no olvides pegar la primera query, para saberlo para esta u otras veces.

    martes, 16 de febrero de 2021 6:32