Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Nhóm theo ngày bỏ qua giờ trong MySQL (GROUP BY DATE)

Khi có các ngày trùng lặp nhưng giờ khác nhau, dùng GROUP BY DATE(cot) để nhóm theo ngày.

Tạo bảng demo

mysql> create table DemoTable692 (DueDatetime datetime);
Query OK, 0 rows affected (0.97 sec)

Chèn dữ liệu cùng ngày 2019-07-21 nhưng giờ khác nhau

mysql> insert into DemoTable692 values('2019-07-21 10:20:00');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable692 values('2019-06-11 11:00:10');
Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable692 values('2019-07-21 11:00:10');
Query OK, 1 row affected (1.97 sec)
mysql> insert into DemoTable692 values('2019-07-21 12:10:10');
Query OK, 1 row affected (0.18 sec)

Hiển thị dữ liệu gốc (4 hàng, 3 hàng cùng ngày 21/07)

mysql> select * from DemoTable692;

Kết quả

+---------------------+
| DueDatetime         |
+---------------------+
| 2019-07-21 10:20:00 |
| 2019-06-11 11:00:10 |
| 2019-07-21 11:00:10 |
| 2019-07-21 12:10:10 |
+---------------------+
4 rows in set (0.00 sec)

Truy vấn GROUP BY DATE(DueDatetime)

mysql> select * from DemoTable692 GROUP BY DATE(DueDatetime);

Kết quả - Chỉ 2 hàng (mỗi ngày 1 hàng đại diện)

+---------------------+
| DueDatetime         |
+---------------------+
| 2019-07-21 10:20:00 |
| 2019-06-11 11:00:10 |
+---------------------+
2 rows in set (0.00 sec)

Giải thích:

  • DATE(DueDatetime) trích xuất phần ngày, bỏ qua giờ/phút/giây.
  • GROUP BY gom nhóm theo giá trị ngày này.
  • MySQL cho phép SELECT cột không trong GROUP BY (chế độ ONLY_FULL_GROUP_BY tắt), trả về hàng đầu tiên gặp trong mỗi nhóm.

Cách chuẩn SQL (chỉ chọn cột gom nhóm/hàm tổng hợp):

SELECT DATE(DueDatetime) as Ngay, COUNT(*) as SoLuong, MIN(DueDatetime) as DauTien, MAX(DueDatetime) as CuoiCung
FROM DemoTable692 GROUP BY DATE(DueDatetime);

Kết quả:

+------------+---------+---------------------+---------------------+
| Ngay       | SoLuong | DauTien             | CuoiCung            |
+------------+---------+---------------------+---------------------+
| 2019-07-21 | 3       | 2019-07-21 10:20:00 | 2019-07-21 12:10:10 |
| 2019-06-11 | 1       | 2019-06-11 11:00:10 | 2019-06-11 11:00:10 |
+------------+---------+---------------------+---------------------+