आप 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
. तक , इसलिए आपको केवल अपने न्यूनतम दिनांक पैरामीटर और अंतराल में से प्रत्येक को एक बार पास करना होगा।