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

समय क्षेत्र की परवाह किए बिना MySQL डेटाटाइम को अंतराल में समूहित करना

आप TIMESTAMPDIFF समय के अंतराल के अनुसार समूहबद्ध करना:

घंटों के निर्दिष्ट अंतराल के लिए, आप इसका उपयोग कर सकते हैं:

SELECT   '2012-08-03 00:00:00' + 
         INTERVAL FLOOR(TIMESTAMPDIFF(HOUR, '2012-08-03 00:00:00', timestamp) / <n>) * <n> HOUR AS start_time,
         COUNT(*) AS total 
FROM     event 
WHERE    timestamp >= '2012-08-03 00:00:00'
GROUP BY start_time

2012-08-03 00:00:00 . की घटनाओं को बदलें आपकी न्यूनतम इनपुट तिथि के साथ।

<n> घंटों . में आपका निर्दिष्ट अंतराल है (हर 2 घंटे, 3 घंटे, आदि), और आप मिनटों के लिए भी ऐसा ही कर सकते हैं:

SELECT   '2012-08-03 00:00:00' + 
         INTERVAL FLOOR(TIMESTAMPDIFF(MINUTE, '2012-08-03 00:00:00', timestamp) / <n>) * <n> MINUTE AS start_time,
         COUNT(*) AS total 
FROM     event 
WHERE    timestamp >= '2012-08-03 00:00:00'
GROUP BY start_time

जहां <n> मिनटों . में आपका निर्दिष्ट अंतराल है (हर 45 मिनट, 90 मिनट, आदि)।

सुनिश्चित करें कि आप अपनी न्यूनतम इनपुट तिथि पास कर रहे हैं (इस उदाहरण में 2012-08-03 00:00:00 ) TIMESTAMPDIFF . के दूसरे पैरामीटर के रूप में ।

संपादित करें: यदि आप इस बारे में चिंता नहीं करना चाहते हैं कि TIMESTAMPDIFF . में कौन सी अंतराल इकाई को चुनना है फ़ंक्शन, फिर निश्चित रूप से केवल सेकंड के अंतराल पर करें (300 =5 मिनट, 3600 =1 घंटा, 7200 =2 घंटे, आदि)

SELECT   '2012-08-03 00:00:00' + 
         INTERVAL FLOOR(TIMESTAMPDIFF(SECOND, '2012-08-03 00:00:00', timestamp) / <n>) * <n> SECOND AS start_time,
         COUNT(*) AS total 
FROM     event 
WHERE    timestamp >= '2012-08-03 00:00:00'
GROUP BY start_time

EDIT2: बयान में उन क्षेत्रों की संख्या को कम करने से संबंधित अपनी टिप्पणी को संबोधित करने के लिए जहां आपको अपनी न्यूनतम पैरामीटर तिथि में उत्तीर्ण होना है, आप इसका उपयोग कर सकते हैं:

SELECT   b.mindate + 
         INTERVAL FLOOR(TIMESTAMPDIFF(SECOND, b.mindate, timestamp) / <n>) * <n> SECOND AS start_time,
         COUNT(*) AS total 
FROM     event 
JOIN     (SELECT '2012-08-03 00:00:00' AS mindate) b ON timestamp >= b.mindate
GROUP BY start_time

और शामिल होने के उप-चयन में बस एक बार अपने न्यूनतम डेटाटाइम पैरामीटर में पास करें।

आप अपने सेकंड के अंतराल (जैसे 3600 के लिए शामिल होने के उप-चयन में दूसरा कॉलम भी बना सकते हैं। ) और कॉलम को secinterval . जैसा कुछ नाम दें ... फिर बदलें <n> से b.secinterval . तक , इसलिए आपको केवल अपने न्यूनतम दिनांक पैरामीटर और अंतराल में से प्रत्येक को एक बार पास करना होगा।

SQLFiddle डेमो



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL पर NOT IN का विकल्प

  2. मिलीसेकंड सटीकता के साथ टाइमस्टैम्प:उन्हें MySQL में कैसे सहेजना है

  3. त्रुटि:तालिका '<तालिका-नाम>' के लिए उपयोगकर्ता '<userid>'@'<ip-address>' को कमांड अस्वीकृत का चयन करें

  4. XmlHTTPRequest:XML पार्सिंग त्रुटि:कोई तत्व नहीं मिला

  5. पीडीओ मुक्त परिणाम