เพื่อดึงข้อมูลที่เกิดขึ้นภายใน 60 นาทีที่ผ่านมา ใช้ INTERVAL ร่วมกับฟังก์ชัน NOW()
รูปแบบคำสั่ง
select *from yourTableName where yourColumnName > now() - interval 60 minute;
สร้างตารางตัวอย่าง
mysql> create table DemoTable (
ArrivalTime datetime );
Query OK, 0 rows affected (0.61 sec)
ตรวจสอบเวลาปัจจุบัน
mysql> select now(); +-----------------------+ | now() | +-----------------------+ | 2019-09-17 00:04:54 | +-----------------------+ 1 row in set (0.00 sec)
เพิ่มข้อมูลตัวอย่าง
mysql> insert into DemoTable values('2019-09-16 08:00:00'); Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('2019-09-17 11:00:00'); Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('2019-09-12 12:00:00'); Query OK, 1 row affected (0.15 sec)
แสดงข้อมูลทั้งหมด
mysql> select *from DemoTable;
+-----------------------+ | ArrivalTime | +-----------------------+ | 2019-09-16 08:00:00 | | 2019-09-17 11:00:00 | | 2019-09-12 12:00:00 | +-----------------------+ 3 rows in set (0.00 sec)
คิวรี่ดึงข้อมูลล่าสุด 60 นาที
mysql> select *from DemoTable where ArrivalTime > now() - interval 60 minute;
ผลลัพธ์ (เฉพาะแถวที่เวลาอยู่ในช่วง 60 นาทีย้อนหลัง):
+-----------------------+ | ArrivalTime | +-----------------------+ | 2019-09-17 11:00:00 | +-----------------------+ 1 row in set (0.00 sec)
การปรับใช้งานจริง
- เปลี่ยน
60 minuteเป็น30 minute,24 hour,7 dayตามต้องการ - ใช้
NOW()สำหรับ datetime,CURDATE()สำหรับ date - เพิ่ม Index ให้คอลัมน์วันที่เพื่อประสิทธิภาพ
CREATE INDEX idx_arrival ON DemoTable(ArrivalTime)
กรณีใช้กับ TIMESTAMP
หากคอลัมน์เป็น TIMESTAMP MySQL จะแปลงโซนเวลาอัตโนมัติ ต้องระวังการตั้งค่า time_zone ของเซิร์ฟเวอร์และ session