You could use the SUM
combined with CASE
trick. It has got me out of many an analytical hole in the past!
Below is an example with a query at the bottom. I am not 100% sure what should be in 'Last Year Month to Date' and 'Last Year to Date' but hopefully you will get the principle of what I am driving at. In the query you'll need to replace 2012, 2011 and 1 with your $currentYear
, $lastYear
and $currentMonth
variables respectively.
create table date_timeframe_example
(myDate datetime not null,
sales int not null default 0
);
insert into date_timeframe_example values (now() - interval 1 year + interval 3 day,51);
insert into date_timeframe_example values (now() - interval 1 year + interval 4 day,5);
insert into date_timeframe_example values (now() - interval 1 year + interval 5 day,7);
insert into date_timeframe_example values (now() - interval 1 year + interval 6 day,87);
insert into date_timeframe_example values (now() - interval 1 year + interval 7 day,12);
insert into date_timeframe_example values (now() - interval 1 year + interval 12 day,0);
insert into date_timeframe_example values (now() - interval 1 year - interval 4 day,1);
insert into date_timeframe_example values (now() - interval 1 year - interval 5 day,1235);
insert into date_timeframe_example values (now() - interval 1 year - interval 12 day,76);
insert into date_timeframe_example values (now() - interval 1 year - interval 6 day,98);
insert into date_timeframe_example values (now() - interval 1 year - interval 2 day,4);
insert into date_timeframe_example values (now() - interval 3 day,8);
insert into date_timeframe_example values (now() - interval 4 day,21);
insert into date_timeframe_example values (now() - interval 5 day,67);
insert into date_timeframe_example values (now() - interval 6 day,73);
insert into date_timeframe_example values (now() - interval 7 day,67);
insert into date_timeframe_example values (now() - interval 12 day,4);
insert into date_timeframe_example values (now() - interval 4 day,9);
insert into date_timeframe_example values (now() - interval 5 week,124);
insert into date_timeframe_example values (now() - interval 12 week,42);
insert into date_timeframe_example values (now() - interval 6 week,9);
insert into date_timeframe_example values (now() - interval 2 week,7);
select
sum(case when year(myDate) = 2012 and month(myDate) = 1 then sales else 0 end) as month_to_date,
sum(case when year(myDate) = 2011 and month(myDate) = 1 then sales else 0 end) as last_year_month_to_date,
sum(case when year(myDate) = 2012 then sales else 0 end) as year_to_date,
sum(case when year(myDate) = 2011 then sales else 0 end) as last_year_to_date
from date_timeframe_example;