Расчет диапазона перемещения в SQL Server (без массивов) - PullRequest
7 голосов
/ 12 октября 2009

У меня есть требование для расчета диапазона перемещения загрузки данных (по крайней мере, я так думаю) в SQL Server. Это было бы легко, если бы я мог использовать массивы, но я понимаю, что это невозможно для MS SQL, поэтому удивляйтесь, если у кого-нибудь было предложение.

Чтобы дать вам представление о том, что мне нужно:

Допустим, в таблице sql server у меня есть следующее:

1  
3  
2  
6  
3  

Мне нужно получить разность каждого из этих чисел (по порядку), т.е.:

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

Затем возведите в квадрат:

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

РЕДАКТИРОВАТЬ: ВЕРОЯТНО СТОИТ, СЧИТАЯ, ЧТО ВЫ НЕ СОГЛАСИТЕ ЭТИ ДЛЯ ПЕРЕМЕЩЕНИЯ СРЕДНЕГО - НЕПРАВИЛЬНО

Затем сложите их:

4+1+16+9=30  

Затем разделите на количество значений:

30/5=6  

Тогда квадратный корень это:

2.5(ish)  

РЕДАКТИРОВАТЬ: ПОТОМУ ЧТО ВЫ ИСПОЛЬЗУЕТЕ ИХ, РАСПОЛОЖАЯ ИХ ИЛИ

Если кто-то может просто помочь мне с первым шагом, это было бы здорово - я могу сделать все остальное сам.

Несколько других вещей, которые следует учитывать:
- Использование хранимых процедур в SQL Server
- Существует достаточно много данных (100 или 1000 значений), и их нужно будет вычислять ежедневно или еженедельно

Большое спасибо заранее.

~ Bob

1 Ответ

7 голосов
/ 12 октября 2009
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
...