ไวยากรณ์ GROUP BY เดือนและปี
ใช้ DATE_FORMAT() สำหรับแสดงผล และ GROUP BY MONTH(), YEAR() สำหรับจัดกลุ่ม:
SELECT DATE_FORMAT(date_column, '%m-%Y') AS month_year
FROM your_table
GROUP BY MONTH(date_column), YEAR(date_column) DESC;
ตัวอย่างการใช้งาน
สร้างตารางและข้อมูลหลายปี
CREATE TABLE GroupMonthAndYearDemo (DueDate DATETIME);
INSERT INTO GroupMonthAndYearDemo VALUES
(NOW()),
(DATE_ADD(NOW(), INTERVAL 2 YEAR)),
(DATE_ADD(NOW(), INTERVAL -2 YEAR)),
(DATE_ADD(NOW(), INTERVAL 1 YEAR)),
(DATE_ADD(NOW(), INTERVAL -1 YEAR));
ข้อมูล (สมมติ NOW = 2018-12-06)
+---------------------+
| DueDate |
+---------------------+
| 2018-12-06 13:12:34 |
| 2020-12-06 13:12:59 |
| 2016-12-06 13:13:08 |
| 2019-12-06 13:13:14 |
| 2017-12-06 13:13:19 |
+---------------------+
คำสั่งจัดกลุ่มเดือนและปี
SELECT DATE_FORMAT(DueDate, '%m-%Y') AS month_year
FROM GroupMonthAndYearDemo
GROUP BY MONTH(DueDate), YEAR(DueDate) DESC;
ผลลัพธ์
+-------------------------------+
| month_year |
+-------------------------------+
| 12-2020 |
| 12-2019 |
| 12-2018 |
| 12-2017 |
| 12-2016 |
+-------------------------------+
รูปแบบ DATE_FORMAT ที่นิยม
| รูปแบบ | ตัวอย่าง | คำอธิบาย |
|---|---|---|
%m-%Y |
12-2024 | เดือน 2 หลัก - ปี 4 หลัก |
%M %Y |
December 2024 | ชื่อเดือนเต็ม + ปี |
%Y-%m |
2024-12 | มาตรฐาน ISO (เรียงได้ถูกต้อง) |
%b %Y |
Dec 2024 | ชื่อเดือนย่อ 3 ตัวอักษร |
นับจำนวนต่อกลุ่ม
SELECT DATE_FORMAT(DueDate, '%m-%Y') AS month_year, COUNT(*) AS cnt
FROM GroupMonthAndYearDemo
GROUP BY MONTH(DueDate), YEAR(DueDate)
ORDER BY YEAR(DueDate) DESC, MONTH(DueDate) DESC;