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.

Función de ventana de PostgreSQL: período mínimo para calcular el promedio.

Quiero calcular el promedio móvil sobre un período móvil de 252 días, pero solo si hay datos de 252 días disponibles en la tabla; de lo contrario, un valor nulo para las filas.
Actualmente estoy usando esta consulta:
SELECT datestamp, symbol, avg(close) OVER (PARTITION BY symbol ORDER BY datestamp ROWS BETWEEN 251 PRECEDING AND CURRENT ROW) FROM daily_prices.
Está dando un promedio incluso si no hay datos de 252 días disponibles.
Quiero lograr un resultado como el que obtenemos con la función de desplazamiento de pandas definiendo el valor mínimo de período.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para calcular el promedio móvil durante un período móvil de 252 días, pero solo si hay 252 días de datos disponibles en la tabla, en caso contrario, valor nulo para las filas, podemos modificar la consulta agregando una condición para verificar si el número de filas en la partición es igual o superior a 252. Si lo es, entonces calculamos el promedio móvil, en caso contrario, devolvemos nulo. Podemos usar la función COUNT() para contar el número de filas en la partición:

    SELECT
    fecha,
    símbolo,
    CASE WHEN COUNT(*) OVER (PARTITION BY símbolo ORDER BY fecha ROWS BETWEEN 251 PRECEDING AND CURRENT ROW) >= 252
    THEN AVG(cierre) OVER (PARTITION BY símbolo ORDER BY fecha ROWS BETWEEN 251 PRECEDING AND CURRENT ROW)
    ELSE NULL
    END AS promedio_móvil
    FROM precios_diarios

    Esta consulta calculará el promedio móvil solo si hay al menos 252 filas en la partición. De lo contrario, devolverá nulo. Esto logra el mismo resultado que la función de desplazamiento de pandas con el parámetro min_periods establecido en 252.

Comments are closed.