Mari saya mulai dengan tabel ini. Saya akan menggunakan stempel waktu biasa sehingga kami dapat dengan mudah melihat apa yang terjadi.
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
Jika saya memahami Anda dengan benar, Anda ingin menghitungnya seperti ini.
180.2.79.3 3
180.2.79.4 3
Anda dapat melakukannya untuk setiap ip_address dengan memilih stempel waktu maksimum yang keduanya
- lebih besar dari stempel waktu baris saat ini, dan
- kurang dari atau sama dengan 10 detik lebih besar dari stempel waktu baris saat ini.
Menggabungkan kedua kriteria ini akan menghasilkan beberapa null, yang ternyata sangat berguna.
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>
Stempel waktu yang menandai akhir kunjungan memiliki nol untuk halaman_berikutnya sendiri. Itu karena tidak ada stempel waktu yang kurang dari atau sama dengan stempel waktu + 10 detik untuk baris tersebut.
Untuk menghitung, saya mungkin akan membuat tampilan dan menghitung nol.
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