मान लीजिए कि आप स्तंभों, तिथि, ग्रुप, एक्स और वाईक्या सीटीई के बजाए ओवर क्लॉज का उपयोग कर टीएसक्यूएल में सहसंबंध की गणना करने का कोई तरीका है?
CREATE TABLE #sample
(
[Date] DATETIME,
GroupID INT,
X FLOAT,
Y FLOAT
)
DECLARE @date DATETIME = getdate()
INSERT INTO #sample VALUES(@date, 1, 1,3)
INSERT INTO #sample VALUES(DATEADD(d, 1, @date), 1, 1,1)
INSERT INTO #sample VALUES(DATEADD(d, 2, @date), 1, 4,2)
INSERT INTO #sample VALUES(DATEADD(d, 3, @date), 1, 3,3)
INSERT INTO #sample VALUES(DATEADD(d, 4, @date), 1, 6,4)
INSERT INTO #sample VALUES(DATEADD(d, 5, @date), 1, 7,5)
INSERT INTO #sample VALUES(DATEADD(d, 6, @date), 1, 1,6)
के साथ एक मेज है और आप प्रत्येक समूह के लिए एक्स और वाई के सहसंबंध की गणना करना चाहते हैं।
;WITH DataAvgStd
AS (SELECT GroupID,
AVG(X) AS XAvg,
AVG(Y) AS YAvg,
STDEV(X) AS XStdev,
STDEV(Y) AS YSTDev,
COUNT(*) AS SampleSize
FROM #sample
GROUP BY GroupID),
ExpectedVal
AS (SELECT s.GroupID,
SUM((X - XAvg) * (Y - YAvg)) AS ExpectedValue
FROM #sample s
JOIN DataAvgStd das
ON s.GroupID = das.GroupID
GROUP BY s.GroupID)
SELECT das.GroupID,
ev.ExpectedValue/(das.SampleSize - 1)/(das.XStdev * das.YSTDev)
AS
Correlation
FROM DataAvgStd das
JOIN ExpectedVal ev
ON das.GroupID = ev.GroupID
DROP TABLE #sample
ऐसा लगता है कि वहाँ पर उपयोग करने के लिए एक तरह से और विभाजन किसी भी सबक्वेरी के बिना एक ही बार में यह करने के लिए किया जाना चाहिए: वर्तमान में मैं सीटीई जो एक छोटे से गंदा मिल का उपयोग करें।
SELECT GroupID, CORR(X, Y) OVER(PARTITION BY GroupID)
FROM #sample
GROUP BY GroupID
मुझे यह देखने में दिलचस्पी होगी कि कोई भी व्यवहार्य समाधान के साथ आता है, हालांकि, मैं हमेशा अपने सभी डेटा को व्यापार परत पर खींचता हूं और वहां सहसंबंध करता हूं। हम जो भी हम "ऋणात्मक सहसंबंध" कहते हैं, हम भी करते हैं - जहां हम सकारात्मक मूल्यों को छोड़ते हैं और केवल नकारात्मक मानों को शामिल करते हैं - यह देखना दिलचस्प होगा कि यह SQL में व्यवहार्य है या नहीं। –
आपके द्वारा पोस्ट किया गया कोड विभिन्न कारणों से निष्पादित नहीं हुआ था। मैंने इसे बदल दिया है, इसलिए यह वास्तव में चलता है कि आप यह सत्यापित करना चाहते हैं कि यह अभी भी जो कुछ भी आप कर रहे थे ... –
यदि एक्स या वाई निरर्थक हैं, तो आपको "# से नमूना" को "# से नमूना" के साथ बदलना होगा जहां एक्स है नल और वाई पूर्ण नहीं है ", अन्यथा आप गलत सहसंबंध –