2013-03-11 14 views
9

मुझे औसत समय की गणना करने में समस्या है। यह मामला है: मेरे पास कई पंक्तियां हैं, प्रत्येक पंक्ति में डेटा प्रारूप में डेटा है, इसलिए मुझे सभी पंक्तियों के औसत समय की गणना करने और पंक्तियों की संख्या के साथ गुणा करने की आवश्यकता है, लेकिन निश्चित रूप से मुझे डेटा प्रारूप में समस्या है क्योंकि मुझे पूर्णांकटी-एसक्यूएल औसत समय की गणना

के साथ समय गुणा करने की आवश्यकता है क्या कोई मुझे कुछ सलाह के साथ मदद कर सकता है? thnx यहाँ कुछ डेटा है:

times 
00:00:00.7400000 
00:00:01.1870000 
00:00:00.6430000 
00:00:00.6100000 
00:00:12.9570000 
00:00:01.1000000 
00:00:00.7400000 
00:00:00.5300000 
00:00:00.6330000 
00:00:01.6000000 
00:00:02.6200000 
00:00:01.0300000 
00:00:01.9630000 
00:00:00.9800000 
00:00:01.0170000 
00:00:00.7600000 
00:00:00.7130000 
00:00:00.9730000 
00:00:01.0000000 
00:00:01.0530000 
00:00:02.9400000 
00:00:00.8200000 
00:00:00.8400000 
00:00:01.1800000 
00:01:25.8230000 
00:00:01.0000000 
00:00:00.9700000 
00:00:01.2930000 
00:00:01.3270000 
00:00:13.5570000 
00:00:19.3170000 
00:00:58.2730000 
00:00:01.6870000 
00:00:18.7570000 
00:00:42.8570000 
00:01:12.3770000 
00:00:01.2170000 
00:00:09.9470000 
00:00:01.4730000 
00:00:00.9030000 
00:00:01.0070000 
00:00:01.1100000 
00:00:01.6270000 
00:00:05.0570000 
00:00:00.6570000 
00:00:00.7900000 
00:00:03.2930000 
00:00:00.8600000 
00:00:01.0330000 
00:00:00.9300000 
00:00:00.8730000 
00:00:00.9600000 
00:00:00.8070000 
NULL 
तो इस डेटा से

एक की जरूरत औसत समय या/और उस डेटा का योग

+0

आपको एक पूर्णांक द्वारा '2013-01-13 08:00 पूर्वाह्न' गुणा करने की आवश्यकता है? –

+0

आप 'दिनांक' और' पूर्णांक' मानों को गुणा कैसे करना चाहते हैं? '12/12/2012 * 12' के लिए परिणाम क्या होना चाहिए ?! – MarcinJuraszek

+1

यदि आप सभी पंक्तियों का औसत लेते हैं और पंक्तियों की संख्या से गुणा करते हैं, तो क्या यह सभी पंक्तियों के योग के समान नहीं है? –

उत्तर

7

आप निम्न जैसा कुछ उपयोग करने के लिए सक्षम होना चाहिए:

select 
    cast(cast(avg(cast(CAST(times as datetime) as float)) as datetime) as time) AvgTime, 
    cast(cast(sum(cast(CAST(times as datetime) as float)) as datetime) as time) TotalTime 
from yourtable; 

SQL Fiddle with Demo देखें।

यह एक datetime को times डेटा धर्मान्तरित, तो एक float ताकि आप avg/sum प्राप्त कर सकते हैं, तो आप एक datetime और अंत में करने के लिए वापस मूल्य कन्वर्ट एक time

8

आप एक गुच्छा कर ऐसा कर सकते हैं तिथि अंकगणित का:

DECLARE @t TABLE(x TIME); 

INSERT @t VALUES('00:01:30'),('00:02:25'),('00:03:25'); 

SELECT CONVERT(TIME, DATEADD(SECOND, AVG(DATEDIFF(SECOND, 0, x)), 0)) FROM @t; 

हालांकि, क्या आप चाहिए कर TIME का उपयोग नहीं कर रहा है एक अंतराल/अवधि स्टोर करने के लिए किया जाना है। TIME समय में एक बिंदु को स्टोर करने के लिए है (उदाहरण के लिए, यदि आपको 24 घंटे से अधिक स्टोर करने की आवश्यकता है तो टूट जाता है)। इसके बजाय आपको किसी ईवेंट के लिए उस प्रारंभ और समाप्ति समय को स्टोर करना चाहिए। यदि आपके पास दो अंत बिंदु हैं तो आप हमेशा अवधि (और औसत अवधि) की गणना कर सकते हैं।

+1

मुझे नहीं पता कि मैंने जवाब देने का प्रयास क्यों किया जब मैंने देखा कि आपने टिप्पणी की थी। – Taryn

+0

@bluefeet ha ha, आपका उत्तर भी अच्छा है, हालांकि मुझे लगता है कि मेरी पसंद के लिए बहुत सारे कलाकार हैं। :-) –

+0

हाँ, मैंने ईवेंट के लिए प्रारंभ और समाप्ति बिंदु संग्रहीत किए हैं, लेकिन मैंने सोचा कि अवधि की गणना करना आसान होगा और फिर – user2158645

0

मान लीजिए कि आपने एक समय क्षेत्र में संग्रहीत अवधि जमा की है, तो आप डैरिटिफ़ फ़ंक्शन को अवधि (या कुल समय) प्राप्त करने के लिए नीचे की तरह कोशिश कर सकते हैं। औसत के लिए औसत का उपयोग करें।

डेमो: http://sqlfiddle.com/#!3/f8c09/2

select sum(datediff(millisecond,0,mytime)) TotalTime 
from t 
0

यह इस और इसी तरह की स्थितियों में उपयोगी हो सकता है।

नीचे मध्यरात्रि से दिनांक/समय को कई मिनटों में परिवर्तित कर देगा। दूसरे शब्दों में एक पूर्णांक के रूप में व्यक्त किया गया समय। आप उस पर औसत कर सकते हैं और फिर समय पर परिवर्तित कर सकते हैं।

declare @dt datetime = GETDATE(); 
select DATEDIFF(minute, dateadd(dd, datediff(dd, 0, @dt), 0), @dt); 
--DATEDIFF(minute, [date without time i.e. midnight], [date/time of interest]) 
संबंधित मुद्दे