1日、1週間などのカウントを更新する代わりに、次のようなアクティビティが発生するたびにテーブルに行を挿入するだけです。
insert into activities (activity_date, activity_info)
values (CURRENT_TIMESTAMP, 'whatever');
これで、レポートは次のように非常に単純になります。
select count(*) from activities
where activity_date between '2008-01-01' and '2008-01-07';
または
select YEARWEEK(`activity_date`) as theweek, count(*)
group by theweek