กรองข้อมูลช่วง 7 วันที่ผ่านมา dengan DATE_SUB และ INTERVAL
ใช้ DATE_SUB() หรือลบ INTERVAL โดยตรงจาก NOW()/CURDATE() เพื่อหาวันที่ 7 วันที่แล้ว แล้วกรองข้อมูลที่มากกว่าวันนั้น
ตัวอย่างสร้างตารางและข้อมูล
CREATE TABLE DemoTable (LoginDate DATE);
INSERT INTO DemoTable VALUES
('2018-03-21'), ('2019-05-22'), ('2019-05-27'), ('2019-06-01');
สมมติวันนี้คือ 2019-06-02
ข้อมูลในตาราง
+------------+ | LoginDate | +------------+ | 2018-03-21 | | 2019-05-22 | | 2019-05-27 | | 2019-06-01 | +------------+
คำสั่งดึงข้อมูล 7 วันที่ผ่านมา (รวมวันนี้)
SELECT * FROM DemoTable WHERE DATE(LoginDate) > (NOW() - INTERVAL 7 DAY);
ผลลัพธ์ (วันที่ > 2019-05-26)
+------------+ | LoginDate | +------------+ | 2019-05-27 | | 2019-06-01 | +------------+
คำอธิบาย:
NOW() - INTERVAL 7 DAYคำนวณวันที่ 7 วันที่แล้วจากปัจจุบัน (รวมเวลา)DATE(LoginDate)แปลงเป็น DATE เฉพาะ (ตัดเวลา) เพื่อเปรียบเทียบแบบ Date-only- ใช้
>(มากกว่า) จะได้วันที่ 27 พฤษภาคม ถึง 2 มิถุนายน (7 วัน)
รูปแบบอื่นที่เทียบเท่า:
WHERE LoginDate >= DATE_SUB(CURDATE(), INTERVAL 7 DAY)(ใช้ CURDATE แทน NOW, ใช้ >=)WHERE LoginDate BETWEEN DATE_SUB(CURDATE(), INTERVAL 6 DAY) AND CURDATE()(ช่วง 7 วันครบ)
⚐ ประสิทธิภาพ: หากคอลัมน์ LoginDate มี Index ควรหลีกเลี่ยงการใช้ Function (DATE()) บนคอลัมน์ ควรเขียนเป็น LoginDate >= '2019-05-26' (คำนวณวันที่ใน Application แล้วส่งมา) หรือใช้ Generated Column + Index