Tạo bảng:
mysql> CREATE TABLE DemoTable1468 ( Id INT, Name VARCHAR(20), Age INT ); Query OK, 0 rows affected (1.21 sec)
Chèn bản ghi (có trùng lặp):
mysql> INSERT INTO DemoTable1468 VALUES(100,'Chris',23); Query OK, 1 row affected (0.19 sec) mysql> INSERT INTO DemoTable1468 VALUES(101,'Bob',25); Query OK, 1 row affected (0.12 sec) mysql> INSERT INTO DemoTable1468 VALUES(102,'David',30); Query OK, 1 row affected (0.11 sec) mysql> INSERT INTO DemoTable1468 VALUES(100,'Chris',23); Query OK, 1 row affected (0.35 sec) mysql> INSERT INTO DemoTable1468 VALUES(100,'Chris',38); Query OK, 1 row affected (0.14 sec) mysql> INSERT INTO DemoTable1468 VALUES(101,'Bob',23); Query OK, 1 row affected (0.13 sec)
Hiển thị:
mysql> SELECT * FROM DemoTable1468;
Kết quả:
+------+-------+------+ | Id | Name | Age | +------+-------+------+ | 100 | Chris | 23 | | 101 | Bob | 25 | | 102 | David | 30 | | 100 | Chris | 23 | | 100 | Chris | 38 | | 101 | Bob | 23 | +------+-------+------+ 6 rows in set (0.00 sec)
Truy vấn xóa trùng lặp và lấy hàng có Age lớn nhất theo nhóm Name, Id:
mysql> SELECT Id, Name, Age FROM DemoTable1468 GROUP BY Name, Id HAVING MAX(Age);
Kết quả:
+------+-------+------+ | Id | Name | Age | +------+-------+------+ | 100 | Chris | 23 | | 101 | Bob | 25 | | 102 | David | 30 | +------+-------+------+ 3 rows in set (0.00 sec)
Lưu ý: Kết quả ví dụ gốc có vẻ không trả về Age=38 cho Chris (Id=100) do cơ chế GROUP BY/HAVING trong MySQL phiên bản cũ. Để chính xác hơn, nên dùng ROW_NUMBER() hoặc JOIN subquery MAX.