Pokud je vytvořeno pole INT, měli byste použít FROM_UNIXTIME funkci převést na datové pole a poté MĚSÍC funkce pro extrakci měsíce:
SELECT Month(FROM_UNIXTIME(created)), Count(*)
FROM yourtable
WHERE FROM_UNIXTIME(created) >= CURDATE() - INTERVAL 1 YEAR
GROUP BY Month(FROM_UNIXTIME(created))
to bude počítat všechny řádky, které byly vytvořeny za posledních 12 měsíců. Všimněte si prosím, že je pravděpodobně lepší seskupit také podle 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))
Pokud potřebujete spočítat registrační čísla místo řádků, můžete použít něco jako
COUNT(registration_number)
pro přeskočení hodnot null nebo
COUNT(DISTINCT registration_number)
počítat pouze odlišné.
Upravit
Pokud také potřebujete zobrazit měsíce, které mají počet =0, použil bych dotaz, jako je tento, který vrátí všechny měsíce pro aktuální a předchozí rok:
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 pak bych použil LEFT JOIN, který vrátí všechny řádky prvního dotazu a pouze řádky druhého dotazu, které odpovídají:
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
(Všimněte si prosím, že zde uvažuji pouze posledních 12 měsíců, takže pokud jsme v polovině dubna 2013, budou se počítat řádky v intervalu květen 2012 - 13. duben, pokud to není správné chování, dejte mi prosím vědět)