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.

Comportamiento de la función de ventana sum() en Redshift.

Estoy intentando usar SUM() de Redshift y funciones de ventana para realizar una suma acumulativa. Mis datos se ven así:

ID item_date item_count
12 01/01/2019 11
12 02/01/2019 8
12 03/01/2019 0
12 04/01/2019 5
12 05/01/2019 21
12 06/01/2019 0

Actualmente, mi suma se ve así:

SUM(item_count) over (partition by ID order by item_date rows unbounded preceding) as cumulative_count

Pero produce esta salida:

ID item_date item_count cumulative_count
12 01/01/2019 11 11
12 02/01/2019 8 19
12 03/01/2019 0 0
12 04/01/2019 5 24
12 05/01/2019 21 45
12 06/01/2019 0 0

El comportamiento es correcto, EXCEPTO cuando item_count = 0. Obviamente, mi salida deseada sería:

ID item_date item_count cumulative_count
12 01/01/2019 11 11
12 02/01/2019 8 19
12 03/01/2019 0 19
12 04/01/2019 5 24
12 05/01/2019 21 45
12 06/01/2019 0 45

He investigado el uso de la función LAST_VALUE() como una forma de rellenar los valores cero, pero en Redshift no se pueden anidar funciones de ventana.

¿Alguien ha visto esto antes?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, este es un comportamiento conocido en Redshift cuando se utilizan funciones de ventana con SUM(). Cuando se encuentra un valor cero, la suma acumulativa dejará de aumentar hasta que se encuentre un valor distinto de cero. Una solución alternativa es utilizar una cláusula CASE para reemplazar los valores cero por NULL, lo cual no afectará al cálculo de la suma acumulativa:

    SUM(CASE WHEN item_count = 0 THEN NULL ELSE item_count END) OVER (PARTITION BY ID ORDER BY item_date ROWS UNBOUNDED PRECEDING) AS cumulative_count
    

    Esto producirá la salida deseada donde la suma acumulativa continúa después de encontrar un valor cero.

Comments are closed.