ใช้ != (หรือ <>) ร่วมกับ Subquery หา MAX ID เพื่อตัดแถวสุดท้ายออก
ไวยากรณ์
SELECT * FROM yourTableName WHERE yourIdColumn != (SELECT MAX(yourIdColumn) FROM yourTableName);
ตัวอย่างการใช้งาน
สร้างตาราง:
mysql> create table AllRecordsExceptLastOne (
-> Id int NOT NULL AUTO_INCREMENT, UserName varchar(10), UserAge int, PRIMARY KEY(Id)
-> );
เพิ่มข้อมูล 6 แถว:
mysql> INSERT INTO AllRecordsExceptLastOne(UserName,UserAge) VALUES
('John',21),('Carol',28),('Mike',22),('Sam',29),('David',27),('Larry',24);
ข้อมูลทั้งหมด:
+----+----------+---------+ | Id | UserName | UserAge | +----+----------+---------+ | 1 | John | 21 | | 2 | Carol | 28 | | 3 | Mike | 22 | | 4 | Sam | 29 | | 5 | David | 27 | | 6 | Larry | 24 | +----+----------+---------+
SELECT ยกเว้นแถวสุดท้าย (Id=6):
mysql> SELECT * FROM AllRecordsExceptLastOne
-> WHERE Id != (SELECT MAX(Id) FROM AllRecordsExceptLastOne);
ผลลัพธ์ (5 แถว):
+----+----------+---------+ | Id | UserName | UserAge | +----+----------+---------+ | 1 | John | 21 | | 2 | Carol | 28 | | 3 | Mike | 22 | | 4 | Sam | 29 | | 5 | David | 27 | +----+----------+---------+
วิธีอื่น (MySQL 8.0+)
SELECT * FROM AllRecordsExceptLastOne ORDER BY Id DESC LIMIT 1 OFFSET 1;
หรือใช้ Window Function:
SELECT * FROM (
SELECT *, ROW_NUMBER() OVER (ORDER BY Id DESC) AS rn FROM AllRecordsExceptLastOne
) t WHERE rn > 1;