2010-04-27 14 views
10

मेरे पास दो डेटाटाइम कॉलम के साथ सत्र नामक एक टेबल है: प्रारंभ और अंत।MySQL: समय अंतर का औसत प्राप्त करें?

प्रत्येक दिन (YYYY-MM-DD) के लिए कई अलग-अलग प्रारंभ और समाप्ति समय हो सकते हैं (एचएच: ii: एसएस)। मुझे इन प्रारंभ और समाप्ति के समय के बीच सभी मतभेदों का दैनिक औसत खोजने की आवश्यकता है।

में कुछ पंक्तियों का एक उदाहरण होगा:

start: 2010-04-10 12:30:00 end: 2010-04-10 12:30:50 
start: 2010-04-10 13:20:00 end: 2010-04-10 13:21:00 
start: 2010-04-10 14:10:00 end: 2010-04-10 14:15:00 
start: 2010-04-10 15:45:00 end: 2010-04-10 15:45:05 
start: 2010-05-10 09:12:00 end: 2010-05-10 09:13:12 
... 

समय मतभेद (सेकंड में) 2010-04-10 के लिए होगा:

50 
60 
300 
5 

2010-04- के लिए औसत 10 103.75 सेकंड होगा। मैं अपने प्रश्न की तरह की तरह कुछ वापस जाने के लिए होगा:

day: 2010-04-10 ave: 103.75 
day: 2010-05-10 ave: 72 
... 

मैं समय अंतर आरंभ तिथि के आधार पर वर्गीकृत प्राप्त कर सकते हैं, लेकिन मुझे यकीन है कि कैसे औसत पाने के लिए नहीं कर रहा हूँ। मैंने एवीजी फ़ंक्शन का उपयोग करने का प्रयास किया लेकिन मुझे लगता है कि यह केवल कॉलम मानों पर सीधे काम करता है (किसी अन्य समग्र फ़ंक्शन के परिणामस्वरूप)।

SELECT 
    TIME_TO_SEC(TIMEDIFF(end,start)) AS timediff 
FROM 
    Sessions 
GROUP BY 
    DATE(start) 

वहाँ एक रास्ता प्रत्येक के लिए timediff की औसत प्राप्त करने के लिए है तिथि समूह शुरू:

यह है कि मैं क्या है? मैं कुल कार्यों के लिए नया हूं इसलिए शायद मैं कुछ गलत समझ रहा हूं। यदि आप वैकल्पिक समाधान के बारे में जानते हैं तो कृपया साझा करें।

मैं हमेशा यह कर सकता है तदर्थ और औसत की गणना मैन्युअल रूप से PHP में लेकिन वहाँ MySQL में यह करने के लिए तो मैं छोरों का एक समूह चल रहा से बचने कर सकते का कोई तरीका है मैं सोच रहा हूँ।

धन्यवाद।

उत्तर

15
SELECT DATE(start) AS startdate, AVG(TIME_TO_SEC(TIMEDIFF(end,start))) AS timediff 
FROM Sessions 
GROUP BY 
     startdate 
+0

हाँ, यही है, जैसे ही मैंने प्रश्न पोस्ट किया, मुझे एहसास हुआ। मुझे मूर्खतापूर्ण लगता है। कारण मैं इसे काम नहीं कर सका क्योंकि मैं एवीजी (टाइमडिफ) कर रहा था, और मुझे लगता है कि आपको अभिव्यक्ति को सीधे पास करने की आवश्यकता है और उपनाम का उपयोग नहीं कर सकता है। धन्यवाद। – nebs

1
SELECT DATE(start) AS startdate, SEC_TO_TIME(AVG(TIME_TO_SEC(TIMEDIFF((end,start))))) AS avgtimediff 
FROM Sessions 
GROUP BY DATE(start) 

यह औसत समय के रूप में पिछले जवाब नंबर दे रहा है दे देंगे।

संबंधित मुद्दे