DATE_ADD
отлично работает с разными месяцами. Проблема в том, что вы добавляете шесть месяцев к 2001-01-01
, и 1 июля должно быть там.
Вот что вы хотите сделать:
SELECT *
FROM mydb
WHERE creationdate BETWEEN "2011-01-01"
AND DATE_ADD("2011-01-01", INTERVAL 6 MONTH) - INTERVAL 1 DAY
GROUP BY MONTH(creationdate)
OR
SELECT *
FROM mydb
WHERE creationdate >= "2011-01-01"
AND creationdate < DATE_ADD("2011-01-01", INTERVAL 6 MONTH)
GROUP BY MONTH(creationdate)
Для дальнейшего изучения, посмотрите документацию DATE_ADD .
* отредактировано для исправления синтаксиса