Посмотрел сейчас у себя в старом скрипте - у меня вложенный запрос - сначала distinct year(adate), а внутри - месяц.
но можно сделать и одним, что-то вроде
SELECT YEAR(adate) AS j, MONTH(adate) AS m FROM fa_news GROUP BY date_format('$Y-%m',adate) ORDER BY date_format('$Y-%m',adate)
и дальше сравнивать год, если он не совпадает с предыдущим, то выводим год, а если совпадает - то месяц