Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Lấy 3 bản ghi cuối cùng và sắp xếp tăng dần trong MySQL

Để lấy N bản ghi cuối (theo ID/timestamp) nhưng hiển thị theo thứ tự tăng dần, dùng subquery: lấy N hàng DESC trước, rồi bọc ngoài sắp xếp ASC.

Cú pháp

SELECT * FROM (
    SELECT * FROM ten_bang ORDER BY cot_sap_xep DESC LIMIT 3
) AS alias
ORDER BY cot_sap_xep ASC;

Ví dụ minh họa

Tạo bảng 5 hàng:

CREATE TABLE DemoTable1579 (Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, Name VARCHAR(20));
INSERT INTO DemoTable1579 (Name) VALUES ('Robert'),('Bob'),('Chris'),('Sam'),('Mike');

Lấy 3 hàng cuối (Id 3,4,5) và sắp xếp tăng dần:

SELECT * FROM (
    SELECT * FROM DemoTable1579 ORDER BY Id DESC LIMIT 3
) AS t
ORDER BY Id;

Kết quả

IdName
3Chris
4Sam
5Mike

Giải thích

  1. Subquery: ORDER BY Id DESC LIMIT 3 → lấy Id 5,4,3 (3 hàng mới nhất).
  2. Outer query: ORDER BY Id ASC → sắp xếp lại 3,4,5.
  3. Alias AS t bắt buộc cho derived table.

MySQL 8.0+: CTE (Common Table Expression) dễ đọc hơn

WITH last_three AS (
    SELECT * FROM DemoTable1579 ORDER BY Id DESC LIMIT 3
)
SELECT * FROM last_three ORDER BY Id;

Ứng dụng thực tế

  • Hiển thị 10 tin nhắn mới nhất trong chat (cũ → mới).
  • Biểu đồ thời gian: lấy 30 điểm dữ liệu gần nhất, vẽ theo thứ tự thời gian.
  • Log audit: xem 5 hành động gần nhất theo thứ tự thời gian.