Máme klasickou databázovou tabulku, kde si ukládám jednotlivé přístupy včetně IP adresy (nebo třeba její hash kvůli GDPR). Z této tabulky bych chtěl zjistit, kolik času jsem strávil na tomto projektu/webu. Za platný čas pokládám interval menší než 30 minut, tzn. nechci započítávat, pokud jsem se vrátil následující hodinu/den apod.

Tento kus MySQL dotazu v tabulce (kromě pár zbytečných hodnot které jsou tam jen pro názornost) by měl spočítat čas strávený na projektu nebo klientově webu.

set @last:=null;
select 
@last,
dtime, 
if(timediff(dtime,@last) < TIME('00:30:00'),timediff(dtime,@last),0) as worktime,
@last:=dtime 
from local_stats
where ip="127.0.0.1"
order by id

Tento SQL dotaz nám vypíše platné intervaly. Výsledek je třeba ještě sečíst.
Sčítat lze pomocí ADDTIME(), výsledný dotaz pak vypadá takto:

SET @before:=NULL;SET @cnt:=TIME('0:0:0');SET @threshold=TIME('0:30:0');
SELECT
@before,
dtime,
if(TIMEDIFF(dtime,@before) < @threshold,TIMEDIFF(dtime,@before),0) as `worktime`,
@cnt:= ADDTIME (
 @cnt,
 if(TIMEDIFF(dtime,@before) < @threshold,TIMEDIFF(dtime,@before),0)
) as `sum`
,@before:=dtime
from local_stats 
where ip="127.0.0.1"  
order by id

Komentáře

Váš komentář: