DB2 uses regular standard SQL for datetime arithmetics. So you can rephrase your predicates like this:
Code:
WHERE table1.YYYY BETWEEN YEAR(CURRENT DATE) AND YEAR(CURRENT DATE -3 MONTHS) AND ...
I don't know what the '&' in the SELECT list is supposed to be doing. Everything else is looking fine.
p.s: Did you have a look at the available datetime data types? You can explicitly store DATEs, TIMEs, and TIMESTAMPs. Separating the storage as you have done is more expensive (because less compact) than splitting year and month portions. And DB2 is smart enough to exploit indexes if you query like this:
Code:
table1.date BETWEEN CURRENT DATE AND (CURRENT DATE + 3 MONTHS - DAYS(CURRENT DATE))