es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para lograr esto, utilizaremos la técnica de gaps-and-islands. Primero crearemos una columna temporal para marcar las islas de fechas consecutivas. Haremos esto restando el número de fila de la columna de fechas. El resultado será constante para las fechas consecutivas en una isla particular.

    A continuación, utilizaremos el resultado del paso anterior para agrupar las filas y asignar un contador a cada grupo. Utilizaremos el número de fila como contador y lo reiniciaremos cada vez que encontramos un nuevo grupo (es decir, cuando cambia el resultado del paso anterior).

    La consulta SQL final se verá así:

    SELECT 
        Dates,
        ROW_NUMBER() OVER (PARTITION BY grp ORDER BY Dates) AS counter
    FROM (
        SELECT 
            Dates, 
            Dates - ROW_NUMBER() OVER (ORDER BY Dates) AS grp
        FROM mytable
    ) t
    ORDER BY Dates
    

    Esta consulta nos dará el resultado esperado:

    Dates Counter
    2021-01-01 1
    2021-01-02 2
    2021-01-03 3
    2021-01-10 1
    2021-01-11 2
    2021-01-12 3
    2021-01-15 1

Comments are closed.