none
Calcular dias consecutivos RRS feed

  • Pregunta

  • Hola a todos, se me ha presentado un detalle en un trabajo de la escuela, queria sacar de una tabla aquellos usuarios que han tenido transacciones pero de dias consecutivos, es decir esto para detectar posible fraude.

    saludos,


    elbarto


    • Editado -mrs jueves, 2 de noviembre de 2017 16:29 mod
    miércoles, 27 de septiembre de 2017 16:54

Respuestas

  • Trata:

    WITH R AS (
    SELECT
        ID,
        FECHATRANSACCION,
        DATEADD(DAY, -1 * ROW_NUMBER() OVER (PARTITION BY ID ORDER BY FECHATRANSACCION), FECHATRANSACCION) AS GroupID
    FROM
        MITABLA
    WHERE
        MITABLA.ID = '00220873'
        AND FECHATRANSACCION BETWEEN CAST('20170801' as date) AND CAST('20170926' as date)
    )
    SELECT
    	ID
    FROM
    	R
    GROUP BY
    	ID,
    	GroupID
    HAVING
    	DATEDIFF(DAY, MIN(FECHATRANSACCION), MAX(FECHATRANSACCION)) >= 4;
    GO

    La idea es que si un grupo de fechas son consecutivas entonces si las enumeramos para cada cliente ordenadas en forma ascendente, entonces al restar esa enumeracion a la fecha ellas caeran en una fecha ancla que conforma el grupo.  Si a cada grupo le calculamos el numero de dias entre la fecha menor y la mayos entonces estariamos contando el numero de dias consecutivos.


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas




    miércoles, 27 de septiembre de 2017 17:21

Todas las respuestas

  • Trata:

    WITH R AS (
    SELECT
        ID,
        FECHATRANSACCION,
        DATEADD(DAY, -1 * ROW_NUMBER() OVER (PARTITION BY ID ORDER BY FECHATRANSACCION), FECHATRANSACCION) AS GroupID
    FROM
        MITABLA
    WHERE
        MITABLA.ID = '00220873'
        AND FECHATRANSACCION BETWEEN CAST('20170801' as date) AND CAST('20170926' as date)
    )
    SELECT
    	ID
    FROM
    	R
    GROUP BY
    	ID,
    	GroupID
    HAVING
    	DATEDIFF(DAY, MIN(FECHATRANSACCION), MAX(FECHATRANSACCION)) >= 4;
    GO

    La idea es que si un grupo de fechas son consecutivas entonces si las enumeramos para cada cliente ordenadas en forma ascendente, entonces al restar esa enumeracion a la fecha ellas caeran en una fecha ancla que conforma el grupo.  Si a cada grupo le calculamos el numero de dias entre la fecha menor y la mayos entonces estariamos contando el numero de dias consecutivos.


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas




    miércoles, 27 de septiembre de 2017 17:21
  • Trata:

    WITH R AS (
    SELECT
        ID,
        FECHATRANSACCION,
        DATEADD(DAY, -1 * ROW_NUMBER() OVER (PARTITION BY ID ORDER BY FECHATRANSACCION), FECHATRANSACCION) AS GroupID
    FROM
        MITABLA
    WHERE
        MITABLA.ID = '00220873'
        AND FECHATRANSACCION BETWEEN CAST('20170801' as date) AND CAST('20170926' as date)
    )
    SELECT
    	ID
    FROM
    	R
    GROUP BY
    	ID,
    	GroupID
    HAVING
    	DATEDIFF(DAY, MIN(FECHATRANSACCION), MAX(FECHATRANSACCION)) >= 4;
    GO

    La idea es que si un grupo de fechas son consecutivas entonces si las enumeramos para cada cliente ordenadas en forma ascendente, entonces al restar esa enumeracion a la fecha ellas caeran en una fecha ancla que conforma el grupo.  Si a cada grupo le calculamos el numero de dias entre la fecha menor y la mayos entonces estariamos contando el numero de dias consecutivos.


    AMB

    Some guidelines for posting questions...

    AYÚDANOS A AYUDARTE, guía básica de consejos para formular preguntas




    Copie y pegue pero al parecer no respeta la condicion :S

    elbarto

    miércoles, 27 de septiembre de 2017 18:06