Możesz uprościć podzapytanie.
Ja niepotrzebnie sprowadziłem wszystkie daty do pierwszego dnia miesiąca (stąd ta jedynka).
SELECT LAST_DAY(DATA) AS miesiac FROM tabela GROUP BY miesiac
Nie bardzo rozumiem. Ostatnich 12 dni miesiąca? Masz może na myśli ostatnie dni każdego z dwunastu miesięcy roku.
Można je uzyskać w ten sposób:
SELECT DATE_SUB(DATE_ADD('2017-01-01', INTERVAL miesiace.miesiac MONTH), INTERVAL 1 DAY)
FROM(
SELECT 1 AS miesiac UNION
SELECT 2 UNION
SELECT 3 UNION
SELECT 4 UNION
SELECT 5 UNION
SELECT 6 UNION
SELECT 7 UNION
SELECT 8 UNION
SELECT 9 UNION
SELECT 10 UNION
SELECT 11 UNION
SELECT 12) AS miesiace
P.S. Zmień UNION na UNION ALL
P.P.S. To zapytanie możesz podstawić do wcześniejszego zapytania. Gdybyś chciał mieć raport za cały rok pomimo braku niektórych danych, to musisz spiąć tabelę źródłową z podzapytaniem poprzez LEFT JOIN.