MySQL-এ টেবিলের শেষ N টি রো ASC অর্ডারে (ক্রমবর্ধমান) পেতে সাবকোয়েরি ব্যবহার করতে হয়। প্রথমে DESC দিয়ে শেষ N টি নেওয়া হয়, তারপর বাইরের কোয়েরিতে ASC দিয়ে সর্ট করা হয়।
সিনট্যাক্স
SELECT * FROM (
SELECT * FROM yourTableName
ORDER BY yourIdColumnName DESC
LIMIT N
) AS anyAliasName
ORDER BY yourIdColumnName ASC;
টেবিল তৈরি এবং ডেটা ইনসার্ট
mysql> CREATE TABLE DemoTable (
-> ClientId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> ClientName VARCHAR(100)
-> );
mysql> INSERT INTO DemoTable(ClientName) VALUES('Larry');
mysql> INSERT INTO DemoTable(ClientName) VALUES('Chris');
mysql> INSERT INTO DemoTable(ClientName) VALUES('Bob');
mysql> INSERT INTO DemoTable(ClientName) VALUES('David');
mysql> INSERT INTO DemoTable(ClientName) VALUES('Carol');
mysql> INSERT INTO DemoTable(ClientName) VALUES('Robert');
mysql> INSERT INTO DemoTable(ClientName) VALUES('Sam');
mysql> INSERT INTO DemoTable(ClientName) VALUES('Mike');
সব রেকর্ড দেখুন
mysql> SELECT * FROM DemoTable;
+----------+------------+
| ClientId | ClientName |
+----------+------------+
| 1 | Larry |
| 2 | Chris |
| 3 | Bob |
| 4 | David |
| 5 | Carol |
| 6 | Robert |
| 7 | Sam |
| 8 | Mike |
+----------+------------+
শেষ ৩টি রো ASC অর্ডারে (Id 6, 7, 8)
mysql> SELECT * FROM (
-> SELECT * FROM DemoTable
-> ORDER BY ClientId DESC
-> LIMIT 3
-> ) tbl
-> ORDER BY ClientId ASC;
ফলাফল
+----------+------------+
| ClientId | ClientName |
+----------+------------+
| 6 | Robert |
| 7 | Sam |
| 8 | Mike |
+----------+------------+
ধাপে ধাপে ব্যাখ্যা:
- ইনার কোয়েরি:
ORDER BY ClientId DESC LIMIT 3→ শেষ ৩টি রো (Id: 8, 7, 6) নেয় - আউটার কোয়েরি:
ORDER BY ClientId ASC→ সেগুলো ASC-এ সর্ট করে (Id: 6, 7, 8)
আধুনিক MySQL 8.0+ এ: CTE ব্যবহার
WITH last_three AS (
SELECT * FROM DemoTable
ORDER BY ClientId DESC
LIMIT 3
)
SELECT * FROM last_three
ORDER BY ClientId ASC;
ব্যবহার: লগ এন্ট্রি, নোটিফিকেশন, ট্রানজ্যাকশন ইত্যাদির লেটেস্ট N টি দেখাতে কিন্তু পুরনো থেকে নতুন ক্রমে।