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

คิวรี่ SELECT แสดงค่าซ้ำพร้อมวันที่มากที่สุด

สำหรับเรื่องนี้ ใช้ 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) หาวันที่มากที่สุดในแต่ละกลุ่ม