Проблема с вашим предложением GROUP BY
. Так как вы группируете по месяцам, а первые данные за каждый месяц - в 2017 году, значение DATE_FORMAT(odd_date_created + INTERVAL -3 DAY,'%Y')
в выборе будет почти наверняка (хотя это не гарантировано, так как заказ не подразумевается) будет 2017. Вам необходимо GROUP BY
год, чтобы вы могли получать данные за каждый месяц каждого года. Затем вы можете выбрать конкретные годы, используя HAVING
. Обратите внимание, что вы можете использовать псевдонимы в предложениях GROUP BY
и HAVING
, поэтому вы можете переписать свой запрос как:
SELECT DATE_FORMAT(odd_date_created + INTERVAL -3 DAY, '%Y') AS `year`,
DATE_FORMAT(odd_date_created + INTERVAL -3 DAY, '%b') AS `month`,
COUNT(odd_Id) as total, status, odd_date_created FROM odd_data
WHERE status = 1
GROUP BY year, month
HAVING year = 2018
Обратите внимание, что наличие status
и odd_date_created
в этом запросе не имеет смысла, поскольку они будут возвращать случайные значения из набора записей, которые соответствуют предложениям WHERE
и HAVING
.