จัดกลุ่มข้อมูลตามวันที่จากคอลัมน์ DATETIME
ใช้ฟังก์ชัน DATE() เพื่อดึงเฉพาะส่วนวันที่จาก DATETIME ก่อนทำ GROUP BY
ไวยากรณ์
SELECT * FROM yourTableName GROUP BY DATE(yourColumnName);
ตัวอย่าง
CREATE TABLE groupByDateDemo (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
UserName VARCHAR(20),
UserPostDatetime DATETIME
);
INSERT INTO groupByDateDemo(UserName, UserPostDatetime) VALUES
('Larry', '2018-01-02 13:45:40'),
('Mike', '2018-01-02 13:45:40'),
('Sam', '2019-01-28 12:30:34'),
('David', '2019-02-10 11:35:54'),
('Maxwell', '2019-02-10 11:35:54');
คำสั่ง GROUP BY
SELECT * FROM groupByDateDemo GROUP BY DATE(UserPostDatetime);
ผลลัพธ์
+----+----------+---------------------+ | Id | UserName | UserPostDatetime | +----+----------+---------------------+ | 1 | Larry | 2018-01-02 13:45:40 | | 3 | Sam | 2019-01-28 12:30:34 | | 4 | David | 2019-02-10 11:35:54 | +----+----------+---------------------+
หมายเหตุสำคัญ
- MySQL จะคืนแถวแรกที่เจอในแต่ละกลุ่ม (Non-deterministic)
- ควรใช้ Aggregate function (COUNT, MAX, MIN) หรือ ANY_VALUE() เพื่อความชัดเจน
- ตั้งแต่ MySQL 5.7+ ต้องตั้ง sql_mode=ONLY_FULL_GROUP_BY
แนะนำ: ใช้ Aggregate Function
SELECT DATE(UserPostDatetime) AS PostDate, COUNT(*) AS PostCount FROM groupByDateDemo GROUP BY DATE(UserPostDatetime);