সর্বশেষ রো বাদ দিয়ে বাকি সব রো সিলেক্ট করতে != অপারেটর সাথে সাবকোয়েরি ব্যবহার করুন।
সিনট্যাক্স
SELECT * FROM yourTableName
WHERE yourIdColumnName != (SELECT MAX(yourIdColumnName) FROM yourTableName);
উদাহরণ দিয়ে বুঝি
টেবিল তৈরি করুন:
mysql> CREATE TABLE AllRecordsExceptLastOne (
-> Id INT NOT NULL AUTO_INCREMENT,
-> UserName VARCHAR(10),
-> UserAge INT,
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.65 sec)
রেকর্ড ইনসার্ট করুন:
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);
সকল রেকর্ড (৬টি):
mysql> SELECT * FROM AllRecordsExceptLastOne;
+----+----------+---------+
| Id | UserName | UserAge |
+----+----------+---------+
| 1 | John | 21 |
| 2 | Carol | 28 |
| 3 | Mike | 22 |
| 4 | Sam | 29 |
| 5 | David | 27 |
| 6 | Larry | 24 |
+----+----------+---------+
6 rows in set (0.00 sec)
শেষ রো (Id=6) বাদ দিয়ে সিলেক্ট
mysql> SELECT * FROM AllRecordsExceptLastOne
-> WHERE Id != (SELECT MAX(Id) FROM AllRecordsExceptLastOne);
+----+----------+---------+
| Id | UserName | UserAge |
+----+----------+---------+
| 1 | John | 21 |
| 2 | Carol | 28 |
| 3 | Mike | 22 |
| 4 | Sam | 29 |
| 5 | David | 27 |
+----+----------+---------+
5 rows in set (0.04 sec)
বিকল্প পদ্ধতি: LIMIT + ORDER BY
SELECT * FROM AllRecordsExceptLastOne
ORDER BY Id DESC LIMIT 1 OFFSET 1;
বা LIMIT 18446744073709551615 OFFSET 1 (MySQL-এ OFFSET বাধ্যতামূলক)।
নোট
- এই পদ্ধতিতে প্রাইমারি কি বা ইউনিক অটো-ইনক্রিমেন্ট কলাম থাকা প্রয়োজন
- যদি ডিলিট হয়ে গ্যাপ থাকে,
MAX(Id)শেষ ইনসার্টেড রো বুঝাবে,phisically শেষ রো নয় - বড় টেবিলে সাবকোয়েরির বদলে জয়ন বা উইন্ডো ফাংশন (MySQL 8.0+) দ্রুত হতে পারে