मैं इस तालिका से शुरू करता हूं। मैं सामान्य टाइमस्टैम्प का उपयोग करूँगा ताकि हम आसानी से देख सकें कि क्या हो रहा है।
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