2013-02-15 18 views
7

तो कहें कि हमारे पास 3 फ़ील्ड हैं, username, start_date, end_dateतीसरे क्षेत्र द्वारा समूहीकृत दो तिथियों के बीच औसत अंतर?

उपयोगकर्ता एकाधिक रिकॉर्ड शुरू और बंद करते हैं, उदाहरण के लिए बॉब ने दो रिकॉर्ड शुरू कर दिए हैं और रोक दिए हैं।

bob 1/2/13 11:00 1/2/13 13:00 
jack 1/2/13 15:00 1/2/13 18:00 
bob 2/2/13 14:00 1/2/13 19:00 

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

मैं अंतर, औसत और समूह को कैसे करना है, इस बारे में अपने सिर को काफी नहीं मिल सकता है? कोई मदद?

उत्तर

9

आप भिन्नता के लिए इच्छित ग्रैन्युलरिटी निर्दिष्ट नहीं करते हैं। इस दिनों में यह करता है:

select username, avg(end_date - start_date) as avg_days 
from mytable 
group by username 

आप सेकंड में अंतर चाहते हैं, datediff() का उपयोग करें:

select username, avg(datediff(ss, start_date, end_date)) as avg_seconds 
... 

DateDiff साल के लिए किसी भी समय इकाई में अंतर को माप सकते हैं पहले पैरामीटर, अलग से जो एसएस, मील, एचएच, डीडी, डब्ल्यूके, मिमी या वाई हो सकता है।

+0

तारीख - तारीख दिनों में अंतर रिटर्न IIRC – Viehzeug

+0

@Viehzeug सेकंड – Bohemian

+0

वाह, ठीक है, सरल की तुलना में मैं कल्पना के लिए समाधान जोड़ा। मान लीजिए कि मैं अपने सिर में इसे और अधिक जटिल बना रहा था, इसकी आवश्यकता थी। –

2
SELECT username, AVG(TIMESTAMPDIFF(HOUR, start_date, end_date)) 
FROM table 
GROUP BY username 
+0

इसके लिए धन्यवाद, बहुत मदद असली जल्दी। दुर्भाग्य से मैं दो उत्तरों का निशान नहीं लगा सकता। –