DATE_ADD
funziona bene con diversi mesi. Il problema è che stai aggiungendo sei mesi a 2001-01-01
e il 1 luglio dovrebbe essere lì.
Questo è quello che vuoi fare:
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)
O
SELECT *
FROM mydb
WHERE creationdate >= "2011-01-01"
AND creationdate < DATE_ADD("2011-01-01", INTERVAL 6 MONTH)
GROUP BY MONTH(creationdate)
Per ulteriori informazioni, dai un'occhiata a DATE_ADD documentazione .
*modificato per correggere la sintassi