Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

दिए गए समय में हर 5 मिनट में डेटा का औसत

ग्रुप टू इंटरवल

आपको group by . का उपयोग करना चाहिए प्रत्येक अंतराल के लिए एक समूह बनाने के लिए जिस पर आप औसत करना चाहते हैं।

select avg(Column), convert((min(datetime) div 500)*500 + 230, datetime) as time
from Databasename.tablename 
where datetime BETWEEN '2012-09-08 00:00:00' AND '2012-09-08 15:30:00'
group by datetime div 500

यह इस तथ्य का उपयोग करता है कि एक तिथि और समय को स्पष्ट रूप से एक संख्या में परिवर्तित किया जा सकता है, जो तब प्रारूप का होगा YYMMDDhhmmss . इस तरह की संख्या को 100 से विभाजित करने पर सेकंड की पट्टी हो जाती है, और इसी तरह 500 से विभाजित करने पर प्रत्येक 5 मिनट के अंतराल के लिए एक अद्वितीय संख्या प्राप्त होती है।

मेरे द्वारा चुना गया अतिरिक्त कॉलम अंतराल के मध्य देगा:अंतराल से किसी भी समय (यहां न्यूनतम चुनना, लेकिन यह वास्तव में कोई फर्क नहीं पड़ता), उस 5 मिनट के अंतराल संख्या में बदल गया, वापस दिनांक और समय में संख्या, और फिर ढाई मिनट जोड़ना। आप शुरुआत की गणना करने के लिए समान सिंटैक्स का उपयोग कर सकते हैं (बस + 230 . छोड़ दें) आउट) या (समावेशी) अंत (+ 459 ) अंतराल के।

sqlfiddle का उपयोग करके परीक्षण किया गया ।

श्रेणी प्रबंधन की समाप्ति

ध्यान दें कि आपका BETWEEN श्रेणी में 15:30:00 . से पंक्तियाँ शामिल होंगी लेकिन उस समय इंटरवल से कोई अन्य शुरू नहीं हुआ था। हो सकता है कि आप अपने चयन से सीमा के अंत को बाहर करना चाहें:

where datetime >= '2012-09-08 00:00:00' AND datetime < '2012-09-08 15:30:00'

आपको NULL क्यों मिलता है

क्यों आपकी क्वेरी NULL उत्पन्न करती है? :अंतराल अंकगणित करने के लिए, आप पूरे अंतराल चीज़ को उद्धरणों में संलग्न नहीं करते हैं, और आप समय इकाइयों के लिए एकवचन नामों का उपयोग करते हैं। यानी

'2012-09-08 15:30:00' + INTERVAL 5 minute

लेकिन यह केवल सीमा को 2012-09-08 15:35:00 . तक बढ़ा देगा और फिर भी उन 5 मिनट के अंतराल को न बनाएं जो आप चाहते हैं। जिस तरह से आपने इसे लिखा है, आप दो तार जोड़ने की कोशिश कर रहे हैं, जो कि MySQL में तब तक संभव नहीं है जब तक कि स्ट्रिंग्स को संख्याओं में परिवर्तित नहीं किया जा सकता, इस स्थिति में उन नंबरों को जोड़ा जाएगा।

आप अंतराल के अनन्य अंत की गणना करने के लिए अंतराल अंकगणित का उपयोग करना चाह सकते हैं, अर्थात के बाद का पहला सेकंड अंतराल:

 convert((min(datetime) div 500)*500, datetime) + INTERVAL 5 minute as endOfInterval

बस 500 adding जोड़ रहे हैं 230 . के बजाय मेरी क्वेरी का परिणाम काम नहीं करेगा क्योंकि परिणामी संख्या प्रत्येक घंटे के अंतिम अंतराल के लिए एक अमान्य तिथि का प्रतिनिधित्व कर सकती है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. #1055 - चयन सूची की अभिव्यक्ति ग्रुप बाय क्लॉज में नहीं है और इसमें गैर-समेकित कॉलम है यह sql_mode=only_full_group_by के साथ असंगत है

  2. वाक्पटु में दो अभिलेखों के बीच मूल्य अंतर की गणना करना

  3. MySQL में सही, या बेहतर, समान ऑपरेटर का उपयोग नहीं करना

  4. App.config में MySQL कनेक्शन स्ट्रिंग को स्टोर करते समय, प्रदातानाम प्रॉपर्टी को किस मान पर सेट किया जाना चाहिए?

  5. मैं कैसे जांचूं कि MySQL में तालिका फ़ील्ड पर कोई अनुक्रमणिका मौजूद है या नहीं?