I would create the query as you've shown for the current year, and
then the same for the previous year, and join the two, like this:

select <columns, math expressions to create percentages>
from ( <this year's query> ) as this_year
   inner join ( <last year's query> ) as last_year using (year, month);

This is probably something a little like what you are trying to do,
logically; but you may need a left outer join, and you may need to do
something else entirely to make it work efficiently if your data is
large.

On Sat, Jan 3, 2009 at 8:27 PM, Eudald Lerga
<eud...@digitalecologies.com> wrote:
> Hi guys:
>
> I am quite new in SQL and I need to build a crosstab based in two tables
> using Mysql, but it is becoming quite dificult.
>
> So far I got a crosstab with the ocurrences for all months in every year
> working:
>
> select YEAR(STR_TO_DATE(F.pubnotdate, '%m/%d/%Y')) as Year,
> SUM(MONTH(STR_TO_DATE(F.pubnotdate, '%m/%d/%Y'))=1) AS '1',
> SUM(MONTH(STR_TO_DATE(F.pubnotdate, '%m/%d/%Y'))=2) AS '2',
> SUM(MONTH(STR_TO_DATE(F.pubnotdate, '%m/%d/%Y'))=3) AS '3',
> SUM(MONTH(STR_TO_DATE(F.pubnotdate, '%m/%d/%Y'))=4) AS '4',
> SUM(MONTH(STR_TO_DATE(F.pubnotdate, '%m/%d/%Y'))=5) AS '5',
> SUM(MONTH(STR_TO_DATE(F.pubnotdate, '%m/%d/%Y'))=6) AS '6',
> SUM(MONTH(STR_TO_DATE(F.pubnotdate, '%m/%d/%Y'))=7) AS '7',
> SUM(MONTH(STR_TO_DATE(F.pubnotdate, '%m/%d/%Y'))=8) AS '8',
> SUM(MONTH(STR_TO_DATE(F.pubnotdate, '%m/%d/%Y'))=9) AS '9',
> SUM(MONTH(STR_TO_DATE(F.pubnotdate, '%m/%d/%Y'))=10) AS '10',
> SUM(MONTH(STR_TO_DATE(F.pubnotdate, '%m/%d/%Y'))=11) AS '11',
> SUM(MONTH(STR_TO_DATE(F.pubnotdate, '%m/%d/%Y'))=12) AS '12',
> count(*) AS total
> FROM Forc as F
> inner join Parc P on F.OBJECTID=P.OBJECTID
> where F.rectype like 'LP%'
> group by Year
>
> this is the result:
>
>  Year             1       2       3       4       5       6       7       8
>       9       10    11   12   total
> 2005    27      36      52      42      34      28      28      40      23
>    31      16      8       365
> 2006    38      47      44      40      33      38      44      49      49
>    53      56      56      547
> 2007    75      54      72      68      59      80      71      82      75
>    84      6       0       726
> 2008    78      87      90      74      76      74      65      70      78
>    85      32      0       809
>
>
> What I have been unsuccesfully trying to accomplish is to have a column next
> to each month with the percent change respect the previous year.
> (lastYear-previousYear)*100/previousYear .
>
> It should look like this:
>
> Year      1       %              2        %
> 2005    27                      36
> 2006    38      40.7%   47       30.5%
> 2007    75      97.4%   54      14.8%
> 2008    78      11.1%   87      61.1%
>
> Any ideas on how to keep going?
>
> Thanks in advance.
>
> Eudald
>
> --
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe:    http://lists.mysql.com/mysql?unsub=ba...@xaprb.com
>
>



-- 
Baron Schwartz, Director of Consulting, Percona Inc.
Our Blog: http://www.mysqlperformanceblog.com/
Our Services: http://www.percona.com/services.html

-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/mysql?unsub=arch...@jab.org

Reply via email to