Để lấy tất cả bản ghi trừ hàng cuối cùng (theo ID lớn nhất), sử dụng toán tử != kết hợp subquery MAX(id).
Cú pháp
SELECT * FROM ten_bang WHERE cot_id != (SELECT MAX(cot_id) FROM ten_bang);
Ví dụ minh họa
Tạo bảng:
mysql> CREATE TABLE AllRecordsExceptLastOne (
-> Id INT NOT NULL AUTO_INCREMENT,
-> UserName VARCHAR(10),
-> UserAge INT,
-> PRIMARY KEY(Id)
-> );
mysql> INSERT INTO AllRecordsExceptLastOne(UserName, UserAge) VALUES('John', 21);
mysql> INSERT INTO AllRecordsExceptLastOne(UserName, UserAge) VALUES('Carol', 28);
mysql> INSERT INTO AllRecordsExceptLastOne(UserName, UserAge) VALUES('Mike', 22);
mysql> INSERT INTO AllRecordsExceptLastOne(UserName, UserAge) VALUES('Sam', 29);
mysql> INSERT INTO AllRecordsExceptLastOne(UserName, UserAge) VALUES('David', 27);
mysql> INSERT INTO AllRecordsExceptLastOne(UserName, UserAge) VALUES('Larry', 24);
Dữ liệu (6 hàng):
+----+----------+---------+ | Id | UserName | UserAge | +----+----------+---------+ | 1 | John | 21 | | 2 | Carol | 28 | | 3 | Mike | 22 | | 4 | Sam | 29 | | 5 | David | 27 | | 6 | Larry | 24 | +----+----------+---------+
Loại bỏ hàng cuối (Id=6):
mysql> SELECT * FROM AllRecordsExceptLastOne
-> WHERE Id != (SELECT MAX(Id) FROM AllRecordsExceptLastOne);
Kết quả (5 hàng):
+----+----------+---------+ | Id | UserName | UserAge | +----+----------+---------+ | 1 | John | 21 | | 2 | Carol | 28 | | 3 | Mike | 22 | | 4 | Sam | 29 | | 5 | David | 27 | +----+----------+---------+
Cách khác (MySQL 8.0+)
-- Dùng window function
SELECT * FROM (
SELECT *, ROW_NUMBER() OVER (ORDER BY Id DESC) AS rn
FROM AllRecordsExceptLastOne
) t WHERE rn > 1;
-- Hoặc LIMIT offset
SELECT * FROM AllRecordsExceptLastOne ORDER BY Id LIMIT 18446744073709551615 OFFSET 1;
Lưu ý: Cách != (SELECT MAX...) đơn giản, tương thích mọi phiên bản MySQL.