En lugar de actualizar los recuentos por día, semana, etc., simplemente INSERTAR una fila en una tabla cada vez que ocurra una actividad como esta:
insert into activities (activity_date, activity_info)
values (CURRENT_TIMESTAMP, 'whatever');
Ahora sus informes son muy simples como:
select count(*) from activities
where activity_date between '2008-01-01' and '2008-01-07';
o
select YEARWEEK(`activity_date`) as theweek, count(*)
group by theweek