2009-10-12 10 views
7

Ich habe eine Anforderung den Bewegungsbereich einer Ladung von Daten (zumindest ich denke, das ist, wie es heißt) in SQL Server zu berechnen. Dies wäre einfach, wenn ich Arrays verwenden könnte, aber ich verstehe, dass dies für MS SQL nicht möglich ist, also frage mich, ob jemand einen Vorschlag hatte.Berechnen von Bewegungsbereich in SQL Server (ohne Arrays)

Sie Um eine Vorstellung davon zu geben, was ich brauche:

Lets sagen, dass ich die folgenden in einer SQL Server-Tabelle haben:

1 
3 
2 
6 
3 

ich brauchen, um den Unterschied von jeder dieser Zahlen (in Auftrag), das heißt:

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

diese dann Quadrat:

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

EDIT: WAHRSCHEINLICH erwähnenswert, dass SIE SQUARE NICHT DIES FÜR gleitender Durchschnitt - ich war falsch

Dann ihnen Summe:

4+1+16+9=30 

teilen Dann durch die Anzahl der Werte:

30/5=6 

Dann Quadratwurzel dies:

2.5(ish) 

EDIT: weil Sie sie ARENT QUADRATUR, ARENT SIE SIE SQROOTING ENTWEDER

Wenn jemand mir nur helfen kann, mit dem ersten Schritt aus, das wäre toll - ich kann den Rest selber.

Ein paar andere Dinge zu berücksichtigen:
- gespeicherte Prozedur in SQL Server
verwenden - Es gibt eine ganze Menge von Daten (100s oder 1000s-Werte), und sie werden täglich oder wöchentlich werden müssen calulated

Vielen Dank im Voraus.

~ Bob

+0

Eine schöne Frage. Ich denke, ich werde meinen heutigen Blogbeitrag daraus machen. – Quassnoi

Antwort

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 
Verwandte Themen