आप समूह का उपयोग करके अपने इच्छित स्तर के साथ ऐसा कर सकते हैं। यहां आपके द्वारा दिए गए डेटा का उपयोग करते हुए एक उदाहरण दिया गया है:
तालिका बनाने और उसे पॉप्युलेट करने के लिए पहले SQL। यहां आईडी कॉलम "आवश्यक" नहीं है, लेकिन यह अनुशंसा की जाती है कि तालिका बड़ी हो या उस पर इंडेक्स हों।
CREATE TABLE `test`.`events` (
`id` INT NOT NULL AUTO_INCREMENT,
`user` INT NULL,
`start` DATETIME NULL,
`end` DATETIME NULL,
`type` VARCHAR(45) NULL,
PRIMARY KEY (`id`));
INSERT INTO events (user, start, end, type) VALUES
(1, '2015-1-1 12:00:00', '2015-1-1 12:03:59', 'browsing'),
(2, '2015-1-1 12:03:00', '2015-1-1 12:06:00', 'browsing'),
(2, '2015-1-1 12:03:00', '2015-1-1 12:06:00', 'eating'),
(3, '2015-1-1 12:03:00', '2015-1-1 12:08:00', 'browsing');
ईवेंट की संख्या के लिए मिनटों की अवधि के क्रमित युग्मों की सूची प्राप्त करने के लिए:
फिर टाइमस्टैम्पडिफ फक्शन का उपयोग करके क्वेरी को आसानी से लिखा जा सकता है, जैसा कि नीचे दिखाया गया है:
SELECT
TIMESTAMPDIFF(MINUTE, start, end) as minutes,
COUNT(*) AS numEvents
FROM
test.events
GROUP BY TIMESTAMPDIFF(MINUTE, start, end)
आउटपुट:
minutes numEvents
3 3
5 1
चयन में पहला पैरामीटर FRAC_SECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, या YEAR में से एक हो सकता है।
यहां कुछ और प्रश्नों के उदाहरण दिए गए हैं जो आप कर सकते हैं:
घंटों के अनुसार ईवेंट (फर्श फ़ंक्शन लागू किया जाता है)
SELECT
TIMESTAMPDIFF(HOUR, start, end) as hours,
COUNT(*) AS numEvents
FROM
test.events
GROUP BY TIMESTAMPDIFF(HOUR, start, end)
**बेहतर फ़ॉर्मेटिंग के साथ घंटे के हिसाब से ईवेंट **
SELECT
CONCAT("<", TIMESTAMPDIFF(HOUR, start, end) + 1) as hours,
COUNT(*) AS numEvents
FROM
test.events
GROUP BY TIMESTAMPDIFF(HOUR, start, end)
आप विभिन्न विकल्पों के आधार पर समूह बना सकते हैं, लेकिन यह निश्चित रूप से आपको आरंभ करना चाहिए। अधिकांश प्लॉटिंग पैकेज आपको मनमाने xy निर्देशांक निर्दिष्ट करने की अनुमति देंगे, इसलिए आपको x अक्ष पर लापता मानों के बारे में चिंता करने की आवश्यकता नहीं है।
एक विशिष्ट समय पर (लॉगिंग के लिए) ईवेंट की संख्या के क्रमित युग्मों की सूची प्राप्त करने के लिए: ध्यान दें कि इसे संदर्भ के लिए छोड़ दिया गया है।
अब प्रश्नों के लिए। सबसे पहले आपको यह चुनना होगा कि आप ग्रुपिंग के लिए किस आइटम का उपयोग करना चाहते हैं। उदाहरण के लिए, किसी कार्य में एक मिनट से अधिक समय लग सकता है, इसलिए प्रारंभ और समाप्ति अलग-अलग मिनटों में होंगे। इन सभी उदाहरणों के लिए, मैं उन्हें प्रारंभ समय के आधार पर आधारित कर रहा हूं, क्योंकि उस समय वास्तव में घटना हुई थी।
ईवेंट की संख्या को मिनट के आधार पर समूहबद्ध करने के लिए, आप इस तरह की क्वेरी का उपयोग कर सकते हैं:
SELECT
DATE_FORMAT(start, '%M %e, %Y %h:%i %p') as minute,
count(*) AS numEvents
FROM test.events
GROUP BY YEAR(start), MONTH(start), DAYOFMONTH(start), HOUR(start), MINUTE(start);
ध्यान दें कि यह वर्ष से शुरू होकर, मिनट में जाकर सभी मदों द्वारा कैसे समूहित करता है। मेरे पास लेबल के रूप में प्रदर्शित मिनट भी है। परिणामी आउटपुट इस तरह दिखता है:
minute numEvents
January 1, 2015 12:00 PM 1
January 1, 2015 12:03 PM 3
यह वह डेटा है जिसे आप PHP का उपयोग करके ले सकते हैं और इसे कई रेखांकन पुस्तकालयों में से एक द्वारा प्रदर्शित करने के लिए तैयार कर सकते हैं, x अक्ष पर मिनट कॉलम की साजिश कर सकते हैं, और y अक्ष पर numEvents की साजिश कर सकते हैं।
यहां कुछ और प्रश्नों के उदाहरण दिए गए हैं जो आप कर सकते हैं:
घंटों के अनुसार ईवेंट
SELECT
DATE_FORMAT(start, '%M %e, %Y %h %p') as hour,
count(*) AS numEvents
FROM test.events
GROUP BY YEAR(start), MONTH(start), DAYOFMONTH(start), HOUR(start);
तिथि के अनुसार ईवेंट
SELECT
DATE_FORMAT(start, '%M %e, %Y') as date,
count(*) AS numEvents
FROM test.events
GROUP BY YEAR(start), MONTH(start), DAYOFMONTH(start);
माह के अनुसार ईवेंट
SELECT
DATE_FORMAT(start, '%M %Y') as date,
count(*) AS numEvents
FROM test.events
GROUP BY YEAR(start), MONTH(start);
वर्ष के अनुसार ईवेंट
SELECT
DATE_FORMAT(start, '%Y') as date,
count(*) AS numEvents
FROM test.events
GROUP BY YEAR(start);
मुझे यह भी बताना चाहिए कि यदि आपके पास इस तालिका के लिए प्रारंभ स्तंभ पर एक अनुक्रमणिका है, तो ये प्रश्न सैकड़ों लाखों पंक्तियों के साथ भी शीघ्रता से पूर्ण हो जाएंगे।
उम्मीद है ये मदद करेगा! अगर इस बारे में आपके कोई अन्य प्रश्न हैं तो मुझे बताएं।