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.

¿Cómo puedo crear números de fila definidos solo por el valor de la fila anterior?

Este es un tarea previamente realizada por un cursor en un script T-SQL muy antiguo que ahora debo eliminar. Para una persona en una tabla ordenada por fechas, tengo un valor que indica que comienza una secuencia, luego continúa y finaliza cuando comienza una nueva (indicando que la anterior ha terminado). No puedo entender cómo hacer que cada una de estas secuencias tenga números de fila. Tenía algo similar en una base de código de R hace unos años que usé RLE, pero esto me tiene perplejo. Necesito obtener esto:

ID STATUS DATE A B
1 START 2000-01-01 1 1
1 CONTINUATION_A&B 2000-01-02 NULL NULL
1 CONTINUATION_A&B 2000-01-03 NULL NULL
1 START 2000-01-04 1 1
1 START 2000-01-05 1 1
1 CONTINUATION_A 2000-01-06 NULL NULL
1 CONTINUATION_A 2000-01-07 NULL NULL

A esto:

ID STATUS DATE A B
1 START 2000-01-01 1 1
1 CONTINUATION_A&B 2000-01-02 2 2
1 CONTINUATION_A&B 2000-01-03 3 3
1 START 2000-01-04 1 1
1 START 2000-01-05 1 1
1 CONTINUATION_A 2000-01-06 2 1
1 CONTINUATION_A 2000-01-07 3 1

Gracias de antemano.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Puedes utilizar la función ROW_NUMBER() para lograr esto. La sintaxis sería algo como lo siguiente:

    SELECT ID, STATUS, DATE, 
        ROW_NUMBER() OVER (PARTITION BY ID ORDER BY DATE) AS A,
        ROW_NUMBER() OVER (PARTITION BY ID, STATUS ORDER BY DATE) AS B
    FROM tuTabla
    

Comments are closed.