2009-10-12 15 views
7

Tengo un requisito para calcular el rango móvil de una carga de datos (al menos creo que así es como se llama) en SQL Server. Esto sería fácil si pudiera usar matrices, pero entiendo que esto no es posible para MS SQL, así que me pregunto si alguien tuvo una sugerencia.Cálculo del rango móvil en SQL Server (sin matrices)

para darle una idea de lo que necesito:

Digamos que tengo lo siguiente en una tabla de SQL Server:

1 
3 
2 
6 
3 

que necesito para obtener la diferencia de cada uno de estos números (en orden), es decir:

|1-3|=2 
|3-2|=1 
|6-2|=4 
|3-6|=3 

Entonces casilla de destino siguientes:

2^2=4 
1^2=1 
4^2=16 
3^2=9 

EDITAR: Probablemente la pena señalar que NO cuadrados estos para PROMEDIO MÓVIL - Me equivoqué

Entonces resumirlas:

4+1+16+9=30 

y se divide por el número de valores:

30/5=6 

A continuación, raíz cuadrada esto:

2.5(ish) 

EDIT: PORQUE ELLOS Arent ESCUADRADO, te enviaban SQROOTING ellos tampoco

Si alguien me puede ayudar con el primer paso, que sería grande - que puedo hacer el resto a mí mismo.

Algunas otras cosas a tener en cuenta:
- El uso del procedimiento almacenado en SQL Server
- Hay una gran cantidad de datos (100s o 1000s de valores), y que tendrá que ser calulated diaria o semanal

Muchas gracias de antemano.

~ Bob

+0

Una buena pregunta. Creo que haré mi publicación de blog de hoy. – Quassnoi

Respuesta

7
WITH nums AS 
     (
     SELECT num, ROW_NUMBER() OVER (ORDER BY id) AS rn 
     FROM mytable 
     ) 
SELECT SQRT(AVG(POWER(tp.num - tf.num, 2))) 
FROM nums tp 
JOIN nums tf 
ON  tf.rn = tp.rn + 1