Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

MySQL GROUP BY วันที่ เมื่อคอลัมน์เป็น DATETIME

จัดกลุ่มข้อมูลตามวันที่จากคอลัมน์ 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);