Sunday 29 October 2017

Servidor Sql Medio Móvil 2008


Estoy tratando de crear una función que calcula un promedio móvil en ventanas en SQLServer 2008. Soy absolutamente nuevo a SQL así que estoy teniendo un pedacito justo de dificultad. Los datos que estoy tratando de realizar la media móvil en las necesidades de ser agrupados por día (que es todos los datos de fecha y hora) y, a continuación, una variable ventana de media móvil debe aplicarse a ella. Ya tengo una función que agrupa los datos por día (e id) que se muestra en la parte inferior. Tengo algunas preguntas: ¿Sería mejor llamar a la función de agrupación dentro de la función de media móvil o debo hacerlo todo de una vez ¿Es posible obtener la media móvil para las fechas de entrada en la función, pero volver n días a Comenzar el promedio móvil de modo que los primeros n días de los datos devueltos no tendrán 0 para su promedio (es decir, si quieren un promedio móvil de 7 días del 01-08-2011 al 02-08-2011 que empiezo el promedio móvil Cálculo en 01-01-2011 para que el primer día que se define tiene un valor) Estoy en el proceso de buscar en cómo hacer el promedio móvil y saber que una ventana en movimiento parece ser la mejor opción (currentSum prevSum todayCount - NthDayAgoCount) / nDays, pero todavía estoy trabajando en averiguar la implementación de SQL de este. Tengo una función de agrupación que se parece a esto (algunas variables eliminadas para fines de visibilidad): Que devuelve una tabla como así: EDIT: Para responder a la primera pregunta que he hecho: Terminé creando una función que declaró una tabla temporal e insertó los resultados A partir de la función de contar en él, a continuación, utiliza el ejemplo de user662852 para calcular el promedio móvil. Tome el rango de fechas con código fijo de su consulta. Escriba la salida (como su muestra al final) a una tabla temporal (lo llamé visitas más abajo). Intente este uno mismo ensambla a la tabla de la temperatura: EDIT: No tuve bastante sitio en los comentarios para decir esto en respuesta a su pregunta: Mi unión es un poco cartesiano porque utiliza un entre en la restricción de la ensambladura. Cada registro en la lista va contra todos los demás registros, y luego quiero los que la fecha que informe es entre un límite inferior de (-7) días y hoy. Cada fecha de datos está disponible para enumerar la fecha, ésta es la llave a su pregunta. Podría haber escrito la condición de unión como Pero lo que realmente ocurrió fue que lo probé como que no devuelve registros porque la sintaxis es entre LOW y HIGH. Me enfrenté a los 0 registros y cambié los argumentos, eso es todo. Intente lo siguiente, vea lo que quiero decir: Esta es la combinación cartesiana para sólo una lista: Compare esto con la condición de unión real Ver cómo la fecha de la lista está entre datadate y dataplus6 en todos los registros Estoy trabajando con SQL Server 2008 R2, Un promedio móvil. Para cada registro en mi vista, me gustaría recopilar los valores de los 250 registros anteriores, y luego calcular el promedio para esta selección. Mis columnas de vista son las siguientes: TransactionID es único. Para cada TransactionID. Me gustaría calcular el promedio para el valor de la columna, más de 250 registros anteriores. Así para TransactionID 300, recopile todos los valores de 250 filas anteriores (la vista se clasifica descendiendo por TransactionID) y luego en la columna MovAvg escriba el resultado del promedio de estos valores. Estoy buscando para recopilar datos dentro de una gama de registros. ¿Cómo calcular los promedios móviles? Ejecute el siguiente script T-SQL en el Editor de consultas de Microsoft SQL Server Management Studio para calcular las medias móviles de 2 meses en el número de proveedores que suministran partes de bicicletas a AdventureWorks Cycles, una montaña ficticia Fabricante de motos: - T-SQL Cálculo del promedio móvil de 60 días USE AdventureWorks2008 DECLARE VendorsByMonth Tabla (Int. De secuencia int. Año int. Int. De mes UniqueVendors int) INSERT VendorsByMonth SELECT ROWNUMBER () OVER (ORDEN POR año (OrderDate), month (OrderDate )), Año (OrderDate), mes (OrderDate), 0 FROM Compras. PurchaseOrderHeader GRUPO POR año (OrderDate), month (OrderDate) DECLARAR i int SET i 2 WHILE (i lt (SELECCIONE MAX (Secuencia) FROM VendorsByMonth)) BEGIN UPDATE m SET m. UniqueVendors (SElect count (distinto VendorID) FROM Purchasing PurchaseOrderHeader poh DONDE m Año Año (poh. OrderDate) y mes Mes Mes (poh. OrderDate) O mp Año Año (poh. OrderDate)) FROM VendorsByMonth m CROSS JOIN ProveedoresByMonth mp DONDE m. Secuencia i y mp. Secuencia i - 1 SET ii 1 FINAL - MIENTRAS SE SELECCIONAN DE VendedoresByMonth ORDEN POR Secuencia GO / Secuencia Año Mes UniqueVendors 1 2001 5 0 2 2002 1 28 3 2002 2 64 4 2002 3 68 5 2002 4 64 6 2002 5 56 7 2002 6 20 8 2002 7 48 9 2002 8 52 10 2002 9 36 11 2002 10 48 12 2002 11 44 ​​13 2003 3 40 14 2003 5 56 15 2003 6 79 16 2003 7 68 17 2003 8 24 18 2003 9 79 19 2003 10 79 20 2003 11 79 21 2003 12 82 22 2004 1 82 23 2004 2 81 24 2004 3 82 25 2004 4 81 26 2004 5 81 27 2004 6 81 28 2004 7 81 29 2004 8 81 30 2004 9 79 31 2004 10 49

No comments:

Post a Comment