Em vez de atualizar as contagens por dia, semana, etc., basta INSERT uma linha em uma tabela cada vez que uma atividade acontece assim:
insert into activities (activity_date, activity_info)
values (CURRENT_TIMESTAMP, 'whatever');
Agora seus relatórios são muito simples como:
select count(*) from activities
where activity_date between '2008-01-01' and '2008-01-07';
ou
select YEARWEEK(`activity_date`) as theweek, count(*)
group by theweek