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)
ИЛИ
SELECT *
FROM mydb
WHERE creationdate >= "2011-01-01"
AND creationdate < DATE_ADD("2011-01-01", INTERVAL 6 MONTH)
GROUP BY MONTH(creationdate)
За по-нататъшно обучение, разгледайте DATE_ADD документация .
*редактирано за правилен синтаксис