GROUP BY วันที่ และนับจำนวนเรคอร์ดซ้ำ
ใช้ DATE() เพื่อดึงเฉพาะส่วนวันที่จาก DATETIME แล้วจัดกลุ่มด้วย GROUP BY และนับด้วย COUNT()
สร้างตารางและข้อมูลตัวอย่าง
mysql> CREATE TABLE DemoTable1496 (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> PassengerCode VARCHAR(20),
-> ArrivalDate DATETIME
-> );
Query OK, 0 rows affected (0.85 sec)
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');
Query OK, 6 rows affected
ข้อมูลทั้งหมด
+----+---------------+---------------------+ | Id | PassengerCode | ArrivalDate | +----+---------------+---------------------+ | 1 | 202 | 2013-03-12 10:12:34 | | 2 | 202_John | 2013-03-12 11:00:00 | | 3 | 204 | 2013-03-12 10:12:34 | | 4 | 208 | 2013-03-14 11:10:00 | | 5 | 202 | 2013-03-18 12:00:34 | | 6 | 202 | 2013-03-18 04:10:01 | +----+---------------+---------------------+
คำสั่ง: จัดกลุ่มตามวันที่ (ของ ArrivalDate) และนับเฉพาะ PassengerCode ที่ขึ้นต้นด้วย '202'
mysql> SELECT DATE(ArrivalDate), COUNT(ArrivalDate)
-> FROM DemoTable1496
-> WHERE PassengerCode LIKE CONCAT('%', '202', '%')
-> GROUP BY DATE(ArrivalDate);
ผลลัพธ์
+-------------------+--------------------+ | date(ArrivalDate) | count(ArrivalDate) | +-------------------+--------------------+ | 2013-03-12 | 2 | | 2013-03-18 | 2 | +-------------------+--------------------+ 2 rows in set (0.00 sec)
คำอธิบาย
DATE(ArrivalDate)- ดึงเฉพาะวันที่ (ตัดเวลาออก)LIKE CONCAT('%', '202', '%')- ค้นหา PassengerCode ที่มี '202' อยู่ตรงไหนก็ได้GROUP BY DATE(ArrivalDate)- จัดกลุ่มตามวันที่COUNT(ArrivalDate)- นับจำนวนเรคอร์ดในแต่ละกลุ่ม
รูปแบบวันที่อื่นๆ ที่ใช้บ่อย
| ฟังก์ชัน | ผลลัพธ์ตัวอย่าง |
|---|---|
DATE(col) | 2013-03-12 |
YEAR(col) | 2013 |
MONTH(col) | 3 |
DAY(col) | 12 |
DATE_FORMAT(col, '%Y-%m') | 2013-03 |