2012-11-02 5 views
5

मैं निम्नलिखित प्रश्न हैं:अंकगणित अतिप्रवाह त्रुटि को अभिव्यक्ति को डेटा प्रकार int में परिवर्तित करने के आसपास कैसे मिलता है?

-- CTE to remove outliers, e.g. remove the fastest and slowest results 
;WITH MinMaxCTE AS 
(
    SELECT ServerName, CONVERT(VARCHAR(10), UpdatedOn, 101) AS [Date], Version, 
    MIN(JaguarStartupTime) AS MinStartTime, MAX(JaguarStartupTime) AS MaxStartTime 
    FROM dbo.MachineConfiguration (NOLOCK) 
    WHERE DomainLogin NOT IN (SELECT DomainLogin FROM dbo.SupportGroup) 
    GROUP BY ServerName, CONVERT(VARCHAR(10), UpdatedOn, 101), Version 
) 

SELECT AVG(mc.JaguarStartupTime) AS AverageTime 
    , COUNT(*) AS NumEntries 
    , mc.Version 
FROM #Eligible mc (NOLOCK) 
JOIN MinMaxCTE cte ON mc.ServerName = cte.ServerName 
    AND CONVERT(VARCHAR(10), mc.UpdatedOn, 101) = cte.[Date] 
    AND mc.Version = cte.Version 
    AND mc.JaguarStartupTime <> cte.MinStartTime 
    AND mc.JaguarStartupTime <> cte.MaxStartTime 
GROUP BY mc.Version 
ORDER BY Version DESC, AVG(mc.JaguarStartupTime) ASC 

#Eligible अस्थायी तालिका की परिभाषा कोई फर्क नहीं पड़ता हालत या एकत्रीकरण मैं बाहर टिप्पणी

create table #Eligible (
    Version nvarchar(50), JaguarStartupTime int, 
    ServerName nvarchar(50), UpdatedOn datetime) 

है, मैं हमेशा निम्न त्रुटि मिलती है: Arithmetic overflow error converting expression to data type int

मैं यहां से कहां से जा सकता हूं? मैं इसे और कैसे डीबग करूं?

संपादित करें: नमूना डेटा

Version JaguarStartupTime ServerName  UpdatedOn 
6.4.6.082  16040   NewOrleansLA 2012-08-08 12:34:12.330 
6.5.1.012  40390   BatonRougeLA 2012-08-08 18:33:17.440 
6.5.1.012  48379   HonoluluHI  2012-08-09 04:42:50.453 
+1

आपके पास इस क्वेरी में एकाधिक समेकन हैं, जो कोई त्रुटि फेंक रहा है? क्या आप कुछ नमूना डेटा पोस्ट कर सकते हैं? 'Dbo.MachineConfiguration' की तालिका संरचना क्या है? – Taryn

+0

@bluefeet 'मशीन कॉन्फ़िगरेशन' की संरचना बिल्कुल # अस्थायी अस्थायी तालिका के समान है। वास्तव में, अस्थायी तालिका 'मशीन कॉन्फ़िगरेशन' का सबसेट है। – AngryHacker

+0

यदि आप सीटी से * जुड़ने से पहले, आदि चुनते हैं, तो क्या आपको कोई त्रुटि मिलती है? – Taryn

उत्तर

5

तुम इतनी तरह अपने औसत कुल में एक bigint करने के लिए अपने jaguarstartup बार कास्टिंग की कोशिश की है ...

औसत (कास्ट (mc.JaguarStartupTime BIGINT के रूप में))

यह अंकगणित अतिप्रवाह को हल करना चाहिए।

औसत औसत की गणना करने के लिए सर्वर को सभी स्याही पहले योग करने में सक्षम होना चाहिए, इसलिए डेटाटाइप आप उन मूल्यों के योग को संग्रहीत करने में सक्षम होने की आवश्यकता पर औसत हैं, भले ही लौटा हुआ उत्तर सीमा के भीतर हो int

+0

धन्यवाद, मैंने अभी भी इसे समझ लिया है। लेकिन मुझे ऐसा करने की ज़रूरत क्यों है? सबसे बड़ा 'जगुआर स्टार्टअपटाइम' int हो सकता है। मुझे इसे बदलने की ज़रूरत क्यों है? स्पष्टीकरण के लिए – AngryHacker

+0

धन्यवाद। – AngryHacker