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

समय अंतराल डेटा के लिए MySql क्वेरी हिस्टोग्राम

आप समूह का उपयोग करके अपने इच्छित स्तर के साथ ऐसा कर सकते हैं। यहां आपके द्वारा दिए गए डेटा का उपयोग करते हुए एक उदाहरण दिया गया है:

तालिका बनाने और उसे पॉप्युलेट करने के लिए पहले 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);

मुझे यह भी बताना चाहिए कि यदि आपके पास इस तालिका के लिए प्रारंभ स्तंभ पर एक अनुक्रमणिका है, तो ये प्रश्न सैकड़ों लाखों पंक्तियों के साथ भी शीघ्रता से पूर्ण हो जाएंगे।

उम्मीद है ये मदद करेगा! अगर इस बारे में आपके कोई अन्य प्रश्न हैं तो मुझे बताएं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. WordPress के साथ HHVM का उपयोग करना

  2. MySQL उच्च उपलब्धता फ्रेमवर्क समझाया - भाग II:सेमीसिंक्रोनस प्रतिकृति

  3. रेल में एकाधिक डीबी कनेक्शन

  4. कैसे जांचें कि MySQL किस पोर्ट पर चल रहा है और क्या इसे कनेक्ट किया जा सकता है?

  5. mysqli में mysql_field_name का विकल्प