none
Buscar fechas cercanas en una misma tabla RRS feed

  • Pregunta

  • Hola, espero me puedan ayudar.

    Tengo una tabla con registros datetime y rut, el tema que necesito es encontrar los datetime que tengan una diferencia maxima de 5 minutos para un mismo rut.

    tabla de ejemplo

    FECHA                          | RUT

    2019-06-24 08:01:00    | 11111111-1
    2019-06-24 17:01:00    | 11111111-1
    2019-06-24 17:03:00    | 11111111-1
    2019-06-25 08:01:00    | 11111111-1
    2019-06-25 17:01:00    | 11111111-1
    2019-06-26 08:01:00    | 11111111-1
    2019-06-26 08:06:00    | 11111111-1
    2019-06-26 17:01:00    | 11111111-1

    Espero me puedan ayudar ya que no he dado con la respuesta.

    Gracias!

    martes, 2 de julio de 2019 19:10

Todas las respuestas

  • Deleted
    martes, 2 de julio de 2019 20:36
  • Hola José:

    Creo que no va a funcionar, el código propuesto, dado que lead no te correrá en el where.

    CREATE TABLE FechasRut
    (Fecha DATETIME, 
     rut   VARCHAR(10)
    );
    GO
    insert into FechasRut (fecha, rut)
    values
    ('20190624 08:01:00','11111111-1'),
    ('20190624 17:01:00','11111111-1'),
    ('20190624 17:03:00','11111111-1'),
    ('20190625 08:01:00','11111111-1'),
    ('20190625 17:01:00','11111111-1'),
    ('20190626 08:01:00','11111111-1'),
    ('20190626 08:06:00','11111111-1'),
    ('20190626 17:01:00','11111111-1');
    
    Go
    
    SELECT RUT, FECHA, 
           lead (FECHA) over (partition by RUT order by FECHA) as [FECHA 2]
      from FechasRut
      where FECHA >= dateadd (minute, -5, lead (FECHA) over (partition by RUT order by FECHA));

    Mens. 4108, Nivel 15, Estado 1, Línea 20
    Las funciones de división de particiones solo pueden aparecer en las cláusulas SELECT u ORDER BY.

    Como estoy seguro de que lo has escrito al vuelo, te pongo una solución sin alterar en nada lo que creo, estabas intentando plasmar.

    -- OPCION 1
    SELECT d.RUT, 
           d.FECHA
    FROM
    (
        SELECT RUT, 
               FECHA, 
               LEAD(FECHA) OVER(PARTITION BY RUT
               ORDER BY FECHA) AS  [FECHA 2]
        FROM FechasRut
    ) AS d
    WHERE FECHA >= DATEADD(minute, -5,  [FECHA 2]);
    Un saludo

    martes, 2 de julio de 2019 21:36
  • Deleted
    martes, 2 de julio de 2019 22:09