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

Lấy các bản ghi trong 10 phút gần nhất so với thời điểm hiện tại trong MySQL

Để chọn các bản ghi có thời gian trong vòng 10 phút tính từ thời điểm hiện tại, bạn dùng hàm DATE_SUB() kết hợp NOW() và INTERVAL.

Cú pháp

SELECT * FROM ten_bang
WHERE ten_cot_thoi_gian >= DATE_SUB(NOW(), INTERVAL 10 MINUTE);

Ví dụ minh họa

1. Tạo bảng

CREATE TABLE users (
    Id INT NOT NULL AUTO_INCREMENT,
    UserName VARCHAR(20),
    UserLastseen DATETIME,
    PRIMARY KEY(Id)
);

2. Chèn dữ liệu (giả sử thời điểm hiện tại là 2019-01-15 15:02:00)

INSERT INTO users(UserName, UserLastseen) VALUES('Larry', '2019-01-15 02:45:00');
INSERT INTO users(UserName, UserLastseen) VALUES('Sam', NOW());
INSERT INTO users(UserName, UserLastseen) VALUES('Mike', '2019-01-15 02:30:00');
INSERT INTO users(UserName, UserLastseen) VALUES('Bob', '2019-01-15 15:02:00');
INSERT INTO users(UserName, UserLastseen) VALUES('David', '2019-01-15 14:55:00');

3. Xem toàn bộ dữ liệu

SELECT * FROM users;

Kết quả:

+----+----------+---------------------+
| Id | UserName | UserLastseen        |
+----+----------+---------------------+
| 1  | Larry    | 2019-01-15 02:45:00 |
| 2  | Sam      | 2019-01-15 15:01:52 |
| 3  | Mike     | 2019-01-15 02:30:00 |
| 4  | Bob      | 2019-01-15 15:02:00 |
| 5  | David    | 2019-01-15 14:55:00 |
+----+----------+---------------------+

4. Truy vấn: Lấy user hoạt động trong 10 phút gần nhất

SELECT * FROM users
WHERE UserLastseen >= DATE_SUB(NOW(), INTERVAL 10 MINUTE);

Kết quả (giả sử NOW() = 2019-01-15 15:02:00):

+----+----------+---------------------+
| Id | UserName | UserLastseen        |
+----+----------+---------------------+
| 2  | Sam      | 2019-01-15 15:01:52 |
| 4  | Bob      | 2019-01-15 15:02:00 |
| 5  | David    | 2019-01-15 14:55:00 |
+----+----------+---------------------+

Các biến thể hữu ích

Yêu cầuCú pháp
Trong 1 giờ quaDATE_SUB(NOW(), INTERVAL 1 HOUR)
Trong 1 ngày quaDATE_SUB(NOW(), INTERVAL 1 DAY)
Trong 30 ngày quaDATE_SUB(NOW(), INTERVAL 30 DAY)
Dùng mốc thời gian cụ thểDATE_SUB('2024-01-15 10:00:00', INTERVAL 10 MINUTE)
Chỉ so sánh ngày (bỏ giờ)DATE(ten_cot) >= DATE_SUB(CURDATE(), INTERVAL 1 DAY)

Lưu ý hiệu năng

  • Nên tạo index cho cột thời gian: CREATE INDEX idx_time ON users(UserLastseen);
  • Tránh dùng hàm trên cột trong WHERE (ví dụ: WHERE DATE(UserLastseen) >= ...) vì sẽ không dùng được index
  • Viết dưới dạng ten_cot >= DATE_SUB(NOW(), ...) để tận dụng index