Hàm MAX() trên cột VARCHAR so sánh theo thứ tự từ điển (lexicographic). Kết hợp SUBSTRING() để so sánh phần số nếu cần.
Tạo bảng và dữ liệu
mysql> CREATE TABLE DemoTable (Id VARCHAR(200)); Query OK, 0 rows affected (0.52 sec)
mysql> INSERT INTO DemoTable VALUES('2019-0515-1980'), ('2019-0516-780'), ('2019-0517-2780');
Query OK, 3 rows affected (0.49 sec)
Truy vấn MAX có điều kiện tiền tố
mysql> SELECT MAX(Id) FROM DemoTable
-> WHERE Id LIKE CONCAT(SUBSTRING(Id, 1, 4), '%');
Kết quả:
+----------------+ | MAX(Id) | +----------------+ | 2019-0517-2780 | +----------------+ 1 row in set (0.00 sec)
Giải thích: SUBSTRING(Id, 1, 4) lấy '2019', CONCAT(..., '%') tạo pattern '2019%'. MAX() trên chuỗi '2019-0517-2780' > '2019-0516-780' > '2019-0515-1980' (so sánh ký tự).
Cảnh báo: So sánh chuỗi số như '780' vs '1980' cho kết quả sai so với số học. Nên tách cột hoặc ép kiểu.