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

Tìm ngày lớn nhất (mới nhất) trong MySQL với MAX và subquery

Truy xuất bản ghi có ngày mới nhất trong MySQL

Sử dụng hàm tổng hợp MAX() trên cột ngày trong truy vấn con để tìm giá trị ngày lớn nhất, sau đó lọc bản ghi chính bằng giá trị đó.

1. Tạo bảng và chèn dữ liệu

mysql> CREATE TABLE DemoTable (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ExpiryDate DATE
);
mysql> INSERT INTO DemoTable (ExpiryDate) VALUES
    ('2018-12-31'), ('2019-09-01'), ('2019-09-01'),
    ('2016-08-30'), ('2019-06-23');

2. Xem dữ liệu

mysql> SELECT * FROM DemoTable;
+----+------------+
| Id | ExpiryDate |
+----+------------+
| 1  | 2018-12-31 |
| 2  | 2019-09-01 |
| 3  | 2019-09-01 |
| 4  | 2016-08-30 |
| 5  | 2019-06-23 |
+----+------------+

3. Truy vấn: Lấy bản ghi có ExpiryDate mới nhất

mysql> SELECT * FROM DemoTable
    WHERE ExpiryDate = (SELECT MAX(ExpiryDate) FROM DemoTable);

4. Kết quả

+----+------------+
| Id | ExpiryDate |
+----+------------+
| 2  | 2019-09-01 |
| 3  | 2019-09-01 |
+----+------------+

Giải thích:

  • Truy vấn con SELECT MAX(ExpiryDate) FROM DemoTable trả về '2019-09-01'
  • Truy vấn chính lọc các hàng có ExpiryDate = '2019-09-01'
  • Trả về 2 bản ghi (Id 2 và 3) vì cả hai cùng ngày mới nhất

Phương pháp thay thế (MySQL 8.0+):

SELECT * FROM DemoTable
ORDER BY ExpiryDate DESC
LIMIT 1;

Chỉ trả về 1 hàng (nếu muốn tất cả hàng cùng ngày max, dùng cách subquery).

Cách dùng JOIN (hiệu quả hơn trên bảng lớn):

SELECT d.* FROM DemoTable d
JOIN (SELECT MAX(ExpiryDate) AS max_date FROM DemoTable) m
ON d.ExpiryDate = m.max_date;