Nếu được tạo là trường INT, bạn nên sử dụng FROM_UNIXTIME hàm để chuyển đổi nó thành một trường ngày tháng và sau đó THÁNG hàm trích xuất tháng:
SELECT Month(FROM_UNIXTIME(created)), Count(*)
FROM yourtable
WHERE FROM_UNIXTIME(created) >= CURDATE() - INTERVAL 1 YEAR
GROUP BY Month(FROM_UNIXTIME(created))
điều này sẽ đếm tất cả các hàng đã được tạo trong 12 tháng qua. Xin lưu ý rằng có lẽ tốt hơn là nên phân nhóm theo NĂM:
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))
Nếu bạn cần đếm số lượng đăng ký thay vì các hàng, bạn có thể sử dụng một cái gì đó như
COUNT(registration_number)
để bỏ qua giá trị null hoặc
COUNT(DISTINCT registration_number)
chỉ đếm những cái riêng biệt.
Chỉnh sửa
Nếu bạn cũng cần hiển thị các tháng có số đếm =0, tôi sẽ sử dụng truy vấn như thế này trả về tất cả các tháng cho hiện tại và cho năm trước:
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;
Và sau đó tôi sẽ sử dụng LEFT JOIN, trả về tất cả các hàng của truy vấn đầu tiên và chỉ các hàng của truy vấn thứ hai phù hợp với:
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
(xin lưu ý rằng ở đây tôi chỉ đang xem xét 12 tháng qua, vì vậy nếu chúng ta đang ở giữa tháng 4 năm 2013, nó sẽ tính các hàng trong khoảng tháng 5 năm 2012 - ngày 13 tháng 4, nếu đây không phải là hành vi chính xác, vui lòng cho tôi biết)