Jeśli utworzone jest pole INT, należy użyć FROM_UNIXTIME funkcja konwertująca go na pole daty, a następnie MIESIĄC funkcja wyodrębniania miesiąca:
SELECT Month(FROM_UNIXTIME(created)), Count(*)
FROM yourtable
WHERE FROM_UNIXTIME(created) >= CURDATE() - INTERVAL 1 YEAR
GROUP BY Month(FROM_UNIXTIME(created))
to zliczy wszystkie wiersze, które zostały utworzone w ciągu ostatnich 12 miesięcy. Zwróć uwagę, że prawdopodobnie lepiej jest również pogrupować według ROKU:
SELECT Year(FROM_UNIXTIME(created)), Month(FROM_UNIXTIME(created)), Count(*)
FROM yourtable
WHERE FROM_UNIXTIME(created) >= CURDATE() - INTERVAL 1 YEAR
GROUP BY Year(FROM_UNIXTIME(created)), Month(FROM_UNIXTIME(created))
Jeśli chcesz policzyć numery rejestracyjne zamiast wierszy, możesz użyć czegoś takiego jak
COUNT(registration_number)
aby pominąć wartości null, lub
COUNT(DISTINCT registration_number)
liczyć tylko różne.
Edytuj
Jeśli chcesz również pokazać miesiące, które mają count=0, użyłbym takiego zapytania, które zwraca wszystkie miesiące z bieżącego i poprzedniego roku:
SELECT y, m
FROM
(SELECT YEAR(CURDATE()) y UNION ALL SELECT YEAR(CURDATE())-1) years,
(SELECT 1 m UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8
UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12) months;
A potem użyłbym LEFT JOIN, który zwraca wszystkie wiersze pierwszego zapytania i tylko wiersze drugiego zapytania, które pasuje:
SELECT y, m, Count(yourtable.created)
FROM (
SELECT y, m
FROM
(SELECT YEAR(CURDATE()) y UNION ALL SELECT YEAR(CURDATE())-1) years,
(SELECT 1 m UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4
UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8
UNION ALL SELECT 9 UNION ALL SELECT 10 UNION ALL SELECT 11 UNION ALL SELECT 12) months) ym
LEFT JOIN yourtable
ON ym.y = YEAR(FROM_UNIXTIME(yourtable.created))
AND ym.m = MONTH(FROM_UNIXTIME(yourtable.created))
WHERE
(y=YEAR(CURDATE()) AND m<=MONTH(CURDATE()))
OR
(y<YEAR(CURDATE()) AND m>MONTH(CURDATE()))
GROUP BY y, m
(proszę zauważyć, że tutaj rozważam tylko ostatnie 12 miesięcy, więc jeśli jesteśmy w połowie kwietnia 2013 r., zliczy wiersze w przedziale maj 2012 - 13 kwietnia, jeśli to nie jest prawidłowe zachowanie, daj mi znać)