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

प्रारंभ और समाप्ति समय के आधार पर दिन का सबसे सक्रिय समय

यदि मैं आपकी आवश्यकताओं को सही ढंग से समझता हूं, यदि यह ग्राफ़ उपयोगकर्ता गतिविधि का प्रतिनिधित्व करता है:

       Day 
       12/1 12/2 12/3 12/4 ...
Hour 0  xx    x    x   xx
     1   x   xx        xx
     2 xxx    x    x   xx
     3   x              x
     4        x         x
     5   x              x
     6                  x
   ...

आप जानना चाहते हैं कि 02:00 उच्चतम औसत गतिविधि वाला दिन का समय है (7 x वाली एक पंक्ति) ), और 12/4 सबसे सक्रिय दिन था (10 x . वाला एक कॉलम ) ध्यान दें कि इसका मतलब यह नहीं है कि 12/4 का 02:00 अब तक का सबसे सक्रिय घंटा था, जैसा कि आप उदाहरण में देख सकते हैं। यदि यह वह नहीं है जो आप चाहते हैं तो कृपया इनपुट और वांछित परिणाम के ठोस उदाहरणों के साथ स्पष्ट करें।

हम कुछ धारणाएँ बनाते हैं:

  • एक गतिविधि रिकॉर्ड एक तारीख को शुरू हो सकता है और अगली तारीख को खत्म हो सकता है। उदाहरण के लिए:ऑनलाइन 2013-12-02 23:35 , ऑफ़लाइन 2013-12-03 00:13
  • किसी भी गतिविधि रिकॉर्ड की अवधि 23 घंटे से अधिक नहीं है, या ऐसे रिकॉर्ड की संख्या नगण्य है।

और हमें यह परिभाषित करने की आवश्यकता है कि 'गतिविधि' का क्या अर्थ है। मैंने उन मानदंडों को चुना जो प्रत्येक मामले में गणना करना आसान था। अधिक जटिल प्रश्नों की कीमत पर, यदि आवश्यक हो तो दोनों को अधिक सटीक बनाया जा सकता है।

  • दिन का सबसे सक्रिय समय वह घंटा होगा जिसके साथ अधिक गतिविधि रिकॉर्ड ओवरलैप होते हैं। ध्यान दें कि यदि कोई उपयोगकर्ता घंटे के दौरान एक से अधिक बार शुरू और बंद करता है तो इसे एक से अधिक बार गिना जाएगा।
  • सबसे सक्रिय दिन वह होगा जिसके लिए अधिक अद्वितीय उपयोगकर्ता थे जो दिन के किसी भी समय सक्रिय थे।

दिन के सबसे सक्रिय समय के लिए हम 24 संभावित घंटों को रखने वाली एक छोटी सहायक तालिका का उपयोग करेंगे। इसे अन्य उत्तरों में वर्णित तकनीकों के साथ उत्पन्न किया जा सकता है और मक्खी पर भी जोड़ा जा सकता है।

CREATE TABLE hour ( hour tinyint not null, primary key(hour) );
INSERT hour (hour)
VALUES (0), (1), (2), (3), (4), (5), (6), (7), (8), (9), (10)
     , (11), (12), (13), (14), (15), (16), (17), (18), (19), (20)
     , (21), (22), (23);

फिर निम्नलिखित प्रश्न आवश्यक परिणाम देते हैं:

SELECT hour, count(*) AS activity
  FROM steamonlineactivity, hour
 WHERE ( hour BETWEEN hour(online) AND hour(offline)
      OR hour(online) BETWEEN hour(offline) AND hour
      OR hour(offline) BETWEEN hour AND hour(online) )
 GROUP BY hour
 ORDER BY activity DESC;

SELECT date, count(DISTINCT userID) AS activity
  FROM ( 
       SELECT userID, date(online) AS date
         FROM steamonlineactivity
        UNION
       SELECT userID, date(offline) AS date
         FROM steamonlineactivity
   ) AS x
 GROUP BY date
 ORDER BY activity DESC;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JSON_MERGE_PRESERVE () - MySQL में एकाधिक JSON दस्तावेज़ मर्ज करें

  2. डॉकर कंपोज़ में MySql डेटाबेस को कैसे इनिट करें?

  3. मुझे दो श्रेणी स्थितियों वाली क्वेरी के लिए अनुक्रमण के बारे में कैसे जाना चाहिए?

  4. MySQL सभी उपयोगकर्ता परिभाषित चर दिखाता है

  5. php फ़ाइल अपलोड, फ़ाइल अपलोड प्रकार को कैसे प्रतिबंधित करें