DATE_ADD
funkar bra med olika månader. Problemet är att du lägger till sex månader till 2001-01-01
och 1 juli är tänkt att vara där.
Det här är vad du vill göra:
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)
ELLER
SELECT *
FROM mydb
WHERE creationdate >= "2011-01-01"
AND creationdate < DATE_ADD("2011-01-01", INTERVAL 6 MONTH)
GROUP BY MONTH(creationdate)
För ytterligare lärande, ta en titt på DATE_ADD dokumentation .
*redigerad för att korrigera syntax