Để xóa bản ghi "cuối cùng" (theo thời gian hoặc ID) thỏa mãn điều kiện, dùng DELETE ... ORDER BY ... DESC LIMIT 1.
Cú pháp
DELETE FROM ten_bang WHERE dieu_kien ORDER BY cot_sap_xep DESC LIMIT 1;
Ví dụ minh họa
Tạo bảng log đăng nhập:
mysql> CREATE TABLE BangDangNhap (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> UserId INT,
-> ThoiGianDangNhap DATETIME
-> );
Chèn dữ liệu (UserId=2 có 3 lần đăng nhập):
mysql> INSERT INTO BangDangNhap(UserId, ThoiGianDangNhap) VALUES
-> (2, '2019-01-27 13:47:20'),
-> (1, '2018-11-28 12:30:12'),
-> (2, '2019-01-26 11:30:30'),
-> (1, '2015-03-11 15:23:55'),
-> (2, '2019-03-21 16:01:56');
Dữ liệu gốc:
+----+--------+---------------------+ | Id | UserId | ThoiGianDangNhap | +----+--------+---------------------+ | 1 | 2 | 2019-01-27 13:47:20 | | 2 | 1 | 2018-11-28 12:30:12 | | 3 | 2 | 2019-01-26 11:30:30 | | 4 | 1 | 2015-03-11 15:23:55 | | 5 | 2 | 2019-03-21 16:01:56 | -- mới nhất của UserId=2 +----+--------+---------------------+
Xóa lần đăng nhập gần nhất của UserId = 2
mysql> DELETE FROM BangDangNhap
-> WHERE UserId = 2
-> ORDER BY ThoiGianDangNhap DESC
-> LIMIT 1;
Kết quả: Query OK, 1 row affected (bản ghi Id=5 bị xóa)
Kiểm tra lại
+----+--------+---------------------+ | Id | UserId | ThoiGianDangNhap | +----+--------+---------------------+ | 1 | 2 | 2019-01-27 13:47:20 | | 2 | 1 | 2018-11-28 12:30:12 | | 3 | 2 | 2019-01-26 11:30:30 | | 4 | 1 | 2015-03-11 15:23:55 | +----+--------+---------------------+
Lưu ý: ORDER BY ... DESC LIMIT 1 đảm bảo xóa bản ghi có giá trị lớn nhất của cột sắp xếp (mới nhất). Không có ORDER BY thì xóa bản ghi ngẫu nhiên thỏa điều kiện.