สำหรับเรื่องนี้ ใช้ GROUP BY และ HAVING ครับ
สร้างตารางตัวอย่าง
mysql> create table DemoTable (
StudentName varchar(100),
DueDate date
);
Query OK, 0 rows affected (0.72 sec)
เพิ่มข้อมูลตัวอย่าง
mysql> insert into DemoTable values('John', '2019-01-11');
Query OK, 1 row affected (0.26 sec)
mysql> insert into DemoTable values('Chris', '2019-02-11');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values('Chris', '2019-03-11');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('John', '2019-04-11');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('Bob', '2019-05-11');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('Bob', '2019-06-11');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('Robert', '2019-07-11');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('Robert', '2019-08-11');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('Robert', '2019-09-11');
Query OK, 1 row affected (0.15 sec)
แสดงข้อมูลทั้งหมด
mysql> select * from DemoTable;
ผลลัพธ์
+-------------+------------+ | StudentName | DueDate | +-------------+------------+ | John | 2019-01-11 | | Chris | 2019-02-11 | | Chris | 2019-03-11 | | John | 2019-04-11 | | Bob | 2019-05-11 | | Bob | 2019-06-11 | | Robert | 2019-07-11 | | Robert | 2019-08-11 | | Robert | 2019-09-11 | +-------------+------------+ 9 rows in set (0.00 sec)
คำสั่งแสดงค่าซ้ำพร้อมวันที่มากที่สุด
mysql> select tbl.StudentName, max(tbl.DueDate) from DemoTable tbl group by tbl.StudentName having count(*) > 1;
ผลลัพธ์
+-------------+------------------+ | StudentName | max(tbl.DueDate) | +-------------+------------------+ | John | 2019-04-11 | | Chris | 2019-03-11 | | Bob | 2019-06-11 | | Robert | 2019-09-11 | +-------------+------------------+ 4 rows in set (0.00 sec)
คำอธิบาย: GROUP BY จัดกลุ่มตามชื่อ HAVING COUNT(*) > 1 กรองเฉพาะชื่อที่ซ้ำ MAX(DueDate) หาวันที่มากที่สุดในแต่ละกลุ่ม