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

पंक्तियों की संख्या गिनें जो एक दूसरे के 10 सेकंड के भीतर नहीं हैं

मैं इस तालिका से शुरू करता हूं। मैं सामान्य टाइमस्टैम्प का उपयोग करूँगा ताकि हम आसानी से देख सकें कि क्या हो रहा है।

180.2.79.3   2011-01-01 08:00:00
180.2.79.3   2011-01-01 08:00:09
180.2.79.3   2011-01-01 08:00:20
180.2.79.3   2011-01-01 08:00:23
180.2.79.3   2011-01-01 08:00:25
180.2.79.3   2011-01-01 08:00:40
180.2.79.4   2011-01-01 08:00:00
180.2.79.4   2011-01-01 08:00:13
180.2.79.4   2011-01-01 08:00:23
180.2.79.4   2011-01-01 08:00:25
180.2.79.4   2011-01-01 08:00:27
180.2.79.4   2011-01-01 08:00:29
180.2.79.4   2011-01-01 08:00:50

अगर मैं आपको सही ढंग से समझूं, तो आप इन्हें इस तरह से गिनना चाहेंगे।

180.2.79.3   3
180.2.79.4   3

आप प्रत्येक ip_address के लिए अधिकतम टाइमस्टैम्प का चयन करके ऐसा कर सकते हैं जो दोनों हो

  • वर्तमान पंक्ति के टाइमस्टैम्प से अधिक, और
  • वर्तमान पंक्ति के टाइमस्टैम्प से 10 सेकंड से कम या उसके बराबर।

इन दो मानदंडों को एक साथ लेने से कुछ नल शुरू हो जाएंगे, जो वास्तव में उपयोगी साबित होते हैं।

select ip_address, 
       t_s.time_stamp, 
       (select max(t.time_stamp) 
        from t_s t 
        where t.ip_address = t_s.ip_address 
          and t.time_stamp > t_s.time_stamp
          and t.time_stamp - t_s.time_stamp <= interval '10' second) next_page
from t_s 
group by ip_address, t_s.time_stamp
order by ip_address, t_s.time_stamp;

ip_address   time_stamp            next_page
180.2.79.3   2011-01-01 08:00:00   2011-01-01 08:00:09
180.2.79.3   2011-01-01 08:00:09   <null>
180.2.79.3   2011-01-01 08:00:20   2011-01-01 08:00:25
180.2.79.3   2011-01-01 08:00:23   2011-01-01 08:00:25
180.2.79.3   2011-01-01 08:00:25   <null>
180.2.79.3   2011-01-01 08:00:40   <null>
180.2.79.4   2011-01-01 08:00:00   <null>
180.2.79.4   2011-01-01 08:00:13   2011-01-01 08:00:23
180.2.79.4   2011-01-01 08:00:23   2011-01-01 08:00:29
180.2.79.4   2011-01-01 08:00:25   2011-01-01 08:00:29
180.2.79.4   2011-01-01 08:00:27   2011-01-01 08:00:29
180.2.79.4   2011-01-01 08:00:29   <null>
180.2.79.4   2011-01-01 08:00:50   <null>

टाइमस्टैम्प जो किसी विज़िट के अंत को चिह्नित करता है, उसके अपने अगले_पृष्ठ के लिए एक शून्य है। ऐसा इसलिए है क्योंकि कोई भी टाइमस्टैम्प उस पंक्ति के लिए time_stamp + 10 सेकंड से कम या उसके बराबर नहीं है।

गिनती प्राप्त करने के लिए, मैं शायद एक दृश्य बनाउंगा और शून्य गिनूंगा।

select ip_address, count(*)
from t_s_visits 
where next_page is null
group by ip_address

180.2.79.3   3
180.2.79.4   3


  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 वर्कबेंच के साथ विदेशी कुंजी जोड़ते समय MySQL त्रुटि 1064

  2. क्या मैं जो कुछ सम्मिलित करना चाहता हूं उसे अपडेट करने के लिए ऑन डुप्लीकेट कुंजी का उपयोग करने का कोई तरीका है?

  3. JDBC, MySQL:बिट्स को BIT(M!=1) कॉलम में प्राप्त करना

  4. MySQL मेरे टाइमस्टैम्प मानों को 0000-00-00 . में बदल रहा है

  5. मैं php और mysql का उपयोग करके एक टैगिंग सिस्टम कैसे बना सकता हूं?