2009-10-12 8 views
7

मुझे SQL सर्वर में डेटा लोड होने की कम से कम चलती रेंज की गणना करने की आवश्यकता है (कम से कम मुझे लगता है कि यह जिसे कहा जाता है)। अगर मैं सरणी का उपयोग कर सकता हूं तो यह आसान होगा, लेकिन मुझे लगता है कि एमएस एसक्यूएल के लिए यह संभव नहीं है, इसलिए आश्चर्य है कि किसी के पास कोई सुझाव है या नहीं। में (एसक्यूएल सर्वर (एरे के बिना) में चलती रेंज की गणना

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) 

संपादित करें: क्योंकि आप उनके बराबरी नहीं हैं, तो आप उन्हें SQROOTING नहीं हैं या तो

अगर कोई बस मुझे पहला कदम के साथ मदद कर सकते हैं, कि बहुत अच्छा होगा - मैं बाकी अपने आप कर सकते हैं।

कुछ अन्य बातों को ध्यान में रखना:
- एसक्यूएल सर्वर में संग्रहित प्रक्रिया का उपयोग करना
- वहाँ काफी डेटा (100s या मूल्यों के 1000s) का एक बहुत है, और वे दैनिक या साप्ताहिक calulated करने की आवश्यकता होगी

अग्रिम में बहुत धन्यवाद।

~ बॉब

+0

एक अच्छा सवाल है। मुझे लगता है कि मैं अपना आज का ब्लॉग पोस्ट कर दूंगा। – Quassnoi

उत्तर

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 
संबंधित मुद्दे