Calcular Media Móvil Sql


Cálculo de un promedio móvil Una de mis tablas contiene mediciones meteorológicas por minuto (por ejemplo, temperatura y humedad) e I39m tratando de usar una cláusula GROUP BY para calcular un promedio diario móvil por mes para estas mediciones. Quiero expresar este promedio en un tipo de datos smalldatetime. Calcular una temperatura promedio diaria es fácil, pero quiero unir estos promedios durante un mes. ¿Cómo puedo crear los datos que necesito? Para ver cómo puede devolver el promedio móvil, primero cree una tabla de Mediciones y rellénela con datos de muestra para la prueba. El Listado 1 rellena la tabla Medidas con un valor de un año de seis mediciones de temperatura diarias aleatorias. El truco al calcular un promedio diario de la temperatura es usar una expresión en la cláusula GROUP BY. La expresión CONVERT (char (10), DT, 112) del guión 2 39s extrae sólo la parte de la fecha de la columna DT, que contiene la fecha y la hora de la medición. Al utilizar esta expresión en la cláusula GROUP BY, devuelve una fila por cada día. Luego, debe solicitar la temperatura promedio y filtrar el mes deseado, como se muestra en el Listado 2. Esta declaración devuelve un mes de valor de los promedios diarios de temperatura, que constituyen el promedio móvil. La tabla 1 muestra la salida del Listado 2. Share this article Discuta este artículo 1 simon (no verificado) No es una media móvil - está promediando por mes calendario - no promediando los últimos 30 días para cada día. Por favor, ingrese o regístrese para enviar comentarios. Artículos Relacionados Búsqueda Acerca de Nosotros Copyright copy 2016 PentonMedio móvil ponderado en T-SQL En un post anterior he demostrado el cálculo de promedios móviles en T-SQL. Sin embargo, hay un inconveniente importante con promedios móviles simples. Los cambios de precios en el inicio del período tienen la misma importancia que los cambios de precios más recientes. De alguna manera le gustaría asignar pesos diferentes a los cambios de precio, de modo que los cambios más recientes obtienen el mayor peso. Para este propósito, se puede calcular un promedio móvil ponderado (WMA). En esta entrada de blog mostraré dos métodos diferentes para calcular WMA, uno que se puede usar en SQL Server 2005 y posterior, y la otra versión es para versiones de SQL Server anteriores a 2005. Para calcular el peso relativo de cada cambio de precio, Necesidad de conocer la posición de cada cambio de precio en relación con el día calculado. Debido a esto, no se puede utilizar una función de ventana. No es posible obtener información de las filas individuales en la ventana. En el ejemplo siguiente calcularemos el promedio móvil ponderado de 9 días (WMA9). El ejemplo utiliza el TAdb. Un script para crear TAdb se puede encontrar aquí. Independientemente de la versión de SQL Server, para cada fila necesitamos acceder a las 8 filas anteriores, 9 con la fila actual incluida. Esas 9 filas serán la ventana que contiene nuestros cambios de precio. A cada fila de esa ventana se le asignará un peso lineal que aumenta con la misma cantidad para cada fila hasta la fila actual. El peso para cada fila se calculará utilizando la posición de la fila de la ventana relativa a la fila actual. Let8217s dicen que queremos calcular WMA para la 9ª línea (cotizaciones de TAdb StockId 1): 1 30,02 30,02 2 30,33 60,66 3 30,33 90,99 4 30,44 121,76 5 30,24 151,20 6 30,27 181,62 7 29,87 209,09 8 30,00 240,00 9 30,02 270,18 La suma de lo anterior es 1355,52. Esto se divide entonces por la suma de los pesos, es decir 123456789 45. El WMA9 para la fila 9 es 1355,52 / 45 30,12. Si desea calcular WMA que no sea durante 9 días, utilice el siguiente T-SQL (obtenga la función GetNums2 aquí) para obtener el divisor para la longitud del período (por ejemplo, 45 para 9 días WMA): Divisor de media móvil ponderada (WMA) Promedio móvil ponderado SQL Server 2005 y versiones posteriores Esta versión utiliza un CTE para calcular el WMA: Resultado durante 9 días Promedio móvil ponderado (WMA9) En los resultados anteriores, puede ver el WMA9 para la fila 9 es 30,12, como se calculó anteriormente. Promedio móvil ponderado antes de SQL Server 2005 La única diferencia entre la versión de SQL Server 2005 y ésta es el uso de una expresión de tabla común. La versión anterior a 2005 utiliza tablas reales en lugar de CTE8217s: Rendimiento Cuando se calcula una media móvil simple y se usa SQL Server 2012 o posterior, se puede observar un gran aumento en el rendimiento cuando se usan funciones de ventana en comparación con los metohods alternativos utilizados en las versiones anteriores de SQL Server . Sin embargo, los cálculos de las medias móviles ponderadas pueden utilizar las funciones de ventana de la misma manera. Una comparación entre la versión de WMA de SQL Server 2005 muestra una pequeña mejora con respecto a las versiones utilizadas en las versiones anteriores de SQL Server: T-SQL WMA SQL Server 2005 comparado con la versión anterior a 2005. Debido a los cálculos costosos involucrados en WMA, podría ser una buena idea persistir los resultados. Uso WMA se utilizan de la misma manera que SMA, en el análisis de tendencias. WMA tiene más peso en los cambios de precios recientes sin embargo. Esta entrada del blog forma parte de una serie sobre análisis técnico, TA, en SQL Server. Vea los otros mensajes aquí. Publicado por Tomas Lind Tomas Lind - Servicios de consultoría como SQL Server DBA y Desarrollador de bases de datos en la costa alta de bases de datos de soluciones AB. SQL Server T-SQL código para calcular una media móvil Por: Dallas Snider Leer más Consejos relacionados: Más funciones - UDF definido por el usuario Problema ¿Cómo puedo suavizar los datos en una columna con una media móvil en T-SQL ¿Puede por favor recorrer un ejemplo en SQL Server con código T-SQL ¿Cómo podemos validar los resultados Solución Los datos de series temporales pueden ser intrínsecamente ruidosos y buenos Manera de suavizar los datos es calcular un promedio móvil. Hay un número de maneras de calcular una media móvil en T-SQL, pero en esta punta vamos a mirar una manera de calcular un promedio móvil que establece la ventana de promedio x número de filas detrás y x número de filas por delante de la actual Fila de datos. La ventaja de esto es que no hay retraso en el valor promedio devuelto y el valor de la media móvil está en la misma fila con su valor actual. Comencemos creando una tabla y cargando algunos datos usando el T-SQL a continuación. Tenemos 361 puntos de datos que crean una onda senoidal ruidosa. Después de cargar los datos, ejecutaremos el siguiente código T-SQL para seleccionar todas las columnas junto con el valor del promedio móvil. En el siguiente código, el tamaño de la ventana del promedio móvil es 15 (7 filas que preceden a la fila actual, más la fila actual, más las 7 filas siguientes). El promedio móvil de la columna DataValue se devuelve como la columna MovingAverageWindowSize15. La cláusula ORDER BY es extremadamente importante para mantener los datos en el orden ordenado adecuado. Podemos copiar y pegar los resultados en Excel para validar que el cálculo es correcto. En la imagen de abajo, la ventana comienza en la celda C3 y termina en C17. El promedio móvil calculado por el T-SQL en esta punta aparece en la celda D10. El promedio calculado por Excel está en la parte inferior y es igual al valor en D10. En la siguiente figura, podemos ver los valores de los datos originales trazados en azul con el promedio móvil representado en rojo. Pasos siguientes Ajuste el tamaño de la ventana del promedio móvil para ver cómo cambia la gráfica. Además, asegúrese de consultar estos otros consejos sobre T-SQL de mssqltips: Última actualización: 3/8/2016

Comments