Lấy N bản ghi cuối cùng nhưng hiển thị theo thứ tự tăng dần
Kỹ thuật: Subquery lấy N bản ghi mới nhất (ORDER BY DESC LIMIT N), rồi query cha sắp xếp lại ASC.
Cú pháp
SELECT * FROM (
SELECT * FROM tenBang ORDER BY cotSapXep DESC LIMIT 20
) AS bangTam
ORDER BY bangTam.cotSapXep ASC;
Ví dụ minh họa
Bảng ProductInformation 23 sản phẩm (ID 101-123). Lấy 20 sản phẩm cuối (ID lớn nhất) nhưng hiển thị ID tăng dần:
SELECT * FROM (
SELECT * FROM ProductInformation ORDER BY ProductId DESC LIMIT 20
) AS t1
ORDER BY t1.ProductId ASC;
Kết quả (20 dòng, ID 104 → 123)
+-----------+-------------+--------------+
| ProductId | ProductName | ProductPrice |
+-----------+-------------+--------------+
| 104 | Product-4 | 100 |
| 105 | Product-5 | 1500 |
...
| 123 | Product-23 | 10000 |
+-----------+-------------+--------------+
Muốn kết quả giảm dần?
Chỉ cần đổi ORDER BY t1.ProductId DESC ở query ngoài.
Ứng dụng thực tế
- Phân trang (pagination) hiển thị trang cuối cùng nhưng dữ liệu tăng dần.
- Log mới nhất nhưng muốn xem theo thứ tự thời gian tự nhiên.
- Top N mới nhất sắp xếp lại cho báo cáo.
Hiệu năng
Cần index trên cột sắp xếp (ProductId). Subquery LIMIT 20 rất nhanh nhờ index.