none
Obtener diferencia de fechas entre datos misma columna RRS feed

  • Pregunta

  • Buenas tardes, les comento mi caso para ver si alguien me puede ayudar. Tengo esta tabla que corresponde al log de entrada y salida del personal. Cada nUserID registra su entrada y salida diariamente, quedando registrados en dos filas su entrada y salida. Su estructura es así:

    nEventLogIdn nDateTime nReaderIdn nEventIdn nUserID Fecha
    814302 1562354667 538623724 55 100007 05/07/2019 19:24
    814299 1562354062 538623724 55 100003 05/07/2019 19:14
    814295 1562353991 538623724 55 100008 05/07/2019 19:13
    915157 1562353950 538623724 55 100001 05/07/2019 19:12
    915154 1562353651 538623724 55 100006 05/07/2019 19:07
    915151 1562353531 538623638 55 100005 05/07/2019 19:05
    915148 1562353519 538623638 55 100004 05/07/2019 19:05
    814292 1562353374 538623638 55 100002 05/07/2019 19:02
    814259 1562318299 538623638 55 100005 05/07/2019 9:18
    915085 1562317607 538623724 55 100006 05/07/2019 9:06
    915082 1562317273 538623638 55 100001 05/07/2019 9:01
    915080 1562317270 538623724 55 100003 05/07/2019 9:01
    915077 1562317255 538623638 55 100007 05/07/2019 9:00
    915074 1562317165 538623638 55 100002 05/07/2019 8:59
    915068 1562317040 538623638 55 100008 05/07/2019 8:57
    915065 1562317037 538623638 55 100004 05/07/2019 8:57

    Necesito una consulta para obtener los datos de la siguiente forma:

    nUserID FechaEntrada FechaSalida Diferencias en Horas
    100007 05/07/2019 8:57 05/07/2019 19:24 10:27:07
    100003 05/07/2019 9:01 05/07/2019 19:14 10:13:12
    100008 05/07/2019 8:57 05/07/2019 19:13 10:15:51
    100001 05/07/2019 9:01 05/07/2019 19:12 10:11:17
    100006 05/07/2019 9:06 05/07/2019 19:07 10:00:44
    100005 05/07/2019 9:18 05/07/2019 19:05 9:47:12
    100004 05/07/2019 8:57 05/07/2019 19:05 10:08:02
    100002 05/07/2019 8:59 05/07/2019 19:02 10:03:29

    ¿Cómo puedo agrupar por dias y por usuario y crear una columna que sea Diferencia de fecha salida y fecha entrada, para resultar las horas que ha permanecido en la empresa?

    Gracias a tod@s de antemano por vuestra ayuda.

    Saludos


    • Editado anjo31f lunes, 8 de julio de 2019 14:55
    lunes, 8 de julio de 2019 14:52

Respuestas

Todas las respuestas

  • Deleted
    lunes, 8 de julio de 2019 15:36
  • Hola Jose, contesto a tus preguntas:

    ¿Cómo se declararon las columnas nUserID y Fecha? Esta es la estructura de TB_LOG

    TB_LOG

    nEventLogIdn (int, No NULL)
    nDateTime (PK, int, No NULL)
    nReaderIdn (PK, int, No NULL)
    nEventIdn (PK, int, No NULL)
    nUserID (PK, int, No NULL)
    nIsLog (smallint, No NULL)
    nTNAEvent (smallint, No NULL)
    nIsUseTA (smallint, No NULL)
    nType (smallint, No NULL)
    

    La tabla que puse en el ejemplo la obtuve haciendo la siguiente consulta (fecha es calculado)

    SELECT  nEventLogIdn, nDateTime, nReaderIdn, nEventIdn, nUserID,
    CONVERT(nVarchar(32), DATEADD(s, [TB_LOG].nDateTime, '01-01-1970'), 20) AS Fecha 
    FROM [TB_LOG]
    WHERE NUSERID >0 AND nEventIdn = 55 
    ORDER BY nDATETIME DESC


    ¿Hay solo dos filas, para cada nUserID / Fecha?

    Cada usuario registra 1 entrada y 1 salida diariamente y su orden no es secuencial. Se van insertando logs siguiendo el orden cronológico.

    ¿Cuál es la versión de SQL Server?

    SQL SERVER 2008 R2

    ¿Me puedes explicar a grosso modo el código de la consulta?

    Gracias por tu tiempo 

    SALUDOS
    martes, 9 de julio de 2019 14:31
  • Deleted
    martes, 9 de julio de 2019 15:14
  • Deleted
    martes, 9 de julio de 2019 16:08
  • Al sustituir la linea, ahora me sale este errror:

    Mens. 156, Nivel 15, Estado 1, Línea 25
    Incorrect syntax near the keyword 'and'. 

    La linea 25 es:

    and T2.seq = (T1.seq +1)

    miércoles, 10 de julio de 2019 6:38
  • Deleted
    miércoles, 10 de julio de 2019 6:50
  • Buenos dias, esta es la información acerca de mi SQL SERVER

    Microsoft SQL Server Management Studio 10.50.2550.0
    Herramientas cliente de Microsoft Analysis Services 10.50.2500.0
    Microsoft Data Access Components (MDAC) 6.1.7601.17514
    Microsoft MSXML 3.0 6.0 
    Microsoft Internet Explorer 9.11.9600.19377
    Microsoft .NET Framework 2.0.50727.8806
    Sistema operativo 6.1.7601

    Cuando consiga ejecutar consulta te confirmo. 

    Gracias

    jueves, 11 de julio de 2019 7:30
  • Upps, tengo este error al ejecutar. José sabes como puedo solucionarlo?

    Mens. 243, Nivel 16, Estado 1, Línea 4
    Type date is not a defined system type.
    Mens. 243, Nivel 16, Estado 1, Línea 4
    Type time is not a defined system type.

    Te pego el codigo

    -- código #1 v3b
    set dateformat dmy;

    with
    Consulta as (
    SELECT  nEventLogIdn, nDateTime, nReaderIdn, nEventIdn, nUserID,
            cast (dateadd (second, [TB_LOG].nDateTime, '01-01-1970') as datetime) as Fecha 
      FROM [TB_LOG]
      WHERE NUSERID > 0 AND nEventIdn = 55 
    ),
    Log_2 as (
    SELECT nUserID, Fecha, cast (Fecha as date) as Dia,
           seq= row_number() over (partition by nUserID, cast (Fecha as time) order by nDateTime)
      from Consulta
    )
    SELECT T1.nUserID, T1.Dia,
           T1.Fecha as [Fecha entrada], T2.Fecha as [Fecha salida],
            cast (dateadd (second, datediff (second, T1.Fecha, T2.Fecha), 0) as time) as Diferencia
      from Log_2 as T1
           inner join Log_2 as T2 on T2.nUserID = T1.nUserID
                                    and T2.Dia = T1.Dia
                                    and T2.seq = (T1.seq +1)
      order by T1.nUserID, T1.Dia;

    Gracias


    • Editado anjo31f jueves, 11 de julio de 2019 9:32
    jueves, 11 de julio de 2019 9:26
  • Deleted
    jueves, 11 de julio de 2019 9:33
  • CIERTO ES.... :( no habia caido en eso... se instalo en un 2005 y accedo desde el management studio 2008, sorry

    es el resultado de PRINT @@version

    Microsoft SQL Server 2005 - 9.00.5000.00 (Intel X86) 
    Dec 10 2010 10:56:29 
    Copyright (c) 1988-2005 Microsoft Corporation
    Express Edition on Windows NT 6.1 (Build 7601: Service Pack 1)

    jueves, 11 de julio de 2019 9:38
  • Deleted
    jueves, 11 de julio de 2019 10:08
  • Perfecto, todo bien. Muchas gracias por su atención.

    • Marcado como respuesta anjo31f viernes, 12 de julio de 2019 7:13
    viernes, 12 de julio de 2019 7:12
  • Hola, la consulta la he venido haciendo pero solo me saca datos hasta el 11 de julio.... saben por que puede estar sucediendo esto?

    Gracias de antemano

    lunes, 29 de julio de 2019 15:01