Lassen Sie mich mit dieser Tabelle beginnen. Ich werde gewöhnliche Zeitstempel verwenden, damit wir leicht sehen können, was vor sich geht.
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
Wenn ich dich richtig verstehe, willst du diese so zählen.
180.2.79.3 3
180.2.79.4 3
Sie können dies für jede IP-Adresse tun, indem Sie den maximalen Zeitstempel auswählen, der beides ist
- größer als der Zeitstempel der aktuellen Zeile und
- weniger als oder gleich 10 Sekunden größer als der Zeitstempel der aktuellen Zeile.
Wenn Sie diese beiden Kriterien zusammennehmen, werden einige Nullen eingeführt, die sich als sehr nützlich erweisen.
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>
Der Zeitstempel, der das Ende eines Besuchs markiert, hat eine Null für seine eigene next_page. Das liegt daran, dass kein Zeitstempel kleiner oder gleich time_stamp + 10 Sekunden für diese Zeile ist.
Um eine Zählung zu erhalten, würde ich wahrscheinlich eine Ansicht erstellen und die Nullen zählen.
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