MySQL: Součet odpracovaných hodin na projektu podle logů v tabulce
Odesláno v May 11, 2016 | Kategorie MySQL | Leave a Comment
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ář: