Jika yang dibuat adalah bidang INT, Anda harus menggunakan FROM_UNIXTIME berfungsi untuk mengubahnya menjadi bidang tanggal, lalu BULAN fungsi untuk mengekstrak bulan:
SELECT Month(FROM_UNIXTIME(created)), Count(*)
FROM yourtable
WHERE FROM_UNIXTIME(created) >= CURDATE() - INTERVAL 1 YEAR
GROUP BY Month(FROM_UNIXTIME(created))
ini akan menghitung semua baris yang telah dibuat dalam 12 bulan terakhir. Harap perhatikan bahwa mungkin lebih baik juga mengelompokkan berdasarkan TAHUN:
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))
Jika Anda perlu menghitung nomor pendaftaran alih-alih baris, Anda dapat menggunakan sesuatu seperti
COUNT(registration_number)
untuk melewati nilai nol, atau
COUNT(DISTINCT registration_number)
untuk menghitung hanya yang berbeda.
Sunting
Jika Anda juga perlu menunjukkan bulan yang memiliki count=0, saya akan menggunakan kueri seperti ini yang mengembalikan semua bulan untuk saat ini dan untuk tahun sebelumnya:
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;
Dan kemudian saya akan menggunakan LEFT JOIN, yang mengembalikan semua baris kueri pertama, dan hanya baris kueri kedua yang cocok:
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
(harap perhatikan bahwa di sini saya hanya mempertimbangkan 12 bulan terakhir, jadi jika kita berada di pertengahan April 2013 itu akan menghitung baris dalam interval Mei 2012 - 13 April, jika ini bukan perilaku yang benar, beri tahu saya)