All you need is a table that stores dates and number of transactions.
create table transactions_per_day (
transaction_date date primary key,
num_transactions integer not null check (num_transactions >= 0)
);
The number of transactions per month and per year can be done in a query with aggregate functions (SUM()) and a WHERE clause. For the total per month . . .
select
extract(year from transaction_date) tr_year,
extract(month from transaction_date) tr_month,
sum(num_transactions) num_tr
from transactions_per_day
where transaction_date between '2013-01-01' and '2013-12-31'
group by tr_year, tr_month
order by tr_year, tr_month;
It often makes sense to create views for the monthly totals and the annual totals.
create view transactions_per_month as
select
extract(year from transaction_date) tr_year,
extract(month from transaction_date) tr_month,
sum(num_transactions) num_tr
from transactions_per_day
where transaction_date between '2013-01-01' and '2013-12-31'
group by tr_year, tr_month
order by tr_year, tr_month;