Khi cần thống kê số lần xuất hiện của một mã (ví dụ: mã hành khách) theo từng ngày, hãy kết hợp DATE() để trích xuất phần ngày từ DATETIME, GROUP BY và COUNT().
Cú pháp
SELECT DATE(ten_cot_datetime), COUNT(*) FROM ten_bang WHERE dieu_kien_loc GROUP BY DATE(ten_cot_datetime);
Ví dụ minh họa
Tạo bảng lịch trình hành khách:
mysql> CREATE TABLE DemoTable1496 (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> PassengerCode VARCHAR(20),
-> ArrivalDate DATETIME
-> );
Chèn dữ liệu (mã '202' xuất hiện nhiều lần, cùng và khác ngày):
mysql> INSERT INTO DemoTable1496(PassengerCode, ArrivalDate) VALUES
-> ('202', '2013-03-12 10:12:34'),
-> ('202_John', '2013-03-12 11:00:00'),
-> ('204', '2013-03-12 10:12:34'),
-> ('208', '2013-03-14 11:10:00'),
-> ('202', '2013-03-18 12:00:34'),
-> ('202', '2013-03-18 04:10:01');
Truy vấn: nhóm theo ngày, chỉ lấy mã chứa '202', đếm số lần đến mỗi ngày:
mysql> SELECT DATE(ArrivalDate), COUNT(ArrivalDate)
-> FROM DemoTable1496
-> WHERE PassengerCode LIKE CONCAT('%', '202', '%')
-> GROUP BY DATE(ArrivalDate);
Kết quả:
+-------------------+--------------------+ | DATE(ArrivalDate) | COUNT(ArrivalDate) | +-------------------+--------------------+ | 2013-03-12 | 2 | | 2013-03-18 | 2 | +-------------------+--------------------+
Giải thích
DATE(ArrivalDate)lấy phần ngày (bỏ giờ phút giây).LIKE CONCAT('%', '202', '%')tìm mã chứa chuỗi '202' (khớp '202', '202_John', v.v.).GROUP BY DATE(ArrivalDate)gom nhóm theo ngày.COUNT(ArrivalDate)đếm số hàng trong mỗi nhóm.
Mẹo: Nên tạo index trên (PassengerCode, ArrivalDate) để tăng tốc truy vấn trên bảng lớn.