การ Query ข้อมูลในช่วงเวลา 14 สัปดาห์ย้อนหลังด้วย DATE_SUB และ CURDATE
ใช้ DATE_SUB(CURDATE(), INTERVAL 14 WEEK) คำนวณวันที่ 14 สัปดาห์ก่อน แล้วใช้ BETWEEN กรองช่วง
รูปแบบคำสั่ง
SELECT * FROM table_name
WHERE date_column BETWEEN DATE_SUB(CURDATE(), INTERVAL 14 WEEK) AND CURDATE();
ตัวอย่าง: ดึง ArrivalDate ใน 14 สัปดาห์ล่าสุด
1. สร้างตารางและเพิ่มข้อมูล (สมมติวันนี้ 2019-08-31)
CREATE TABLE DemoTable (ArrivalDate DATE);
INSERT INTO DemoTable VALUES
('2019-04-21'), ('2019-03-01'), ('2019-09-01'),
('2019-08-31'), ('2019-06-30'), ('2019-06-01');
2. ดูข้อมูลทั้งหมด
SELECT * FROM DemoTable;
ผลลัพธ์:
+-------------+
| ArrivalDate |
+-------------+
| 2019-04-21 |
| 2019-03-01 |
| 2019-09-01 |
| 2019-08-31 |
| 2019-06-30 |
| 2019-06-01 |
+-------------+
3. Query 14 สัปดาห์ย้อนหลัง
SELECT * FROM DemoTable
WHERE ArrivalDate BETWEEN DATE_SUB(CURDATE(), INTERVAL 14 WEEK) AND CURDATE();
ผลลัพธ์ (CURDATE = 2019-08-31):
+-------------+
| ArrivalDate |
+-------------+
| 2019-08-31 |
| 2019-06-30 |
| 2019-06-01 |
+-------------+
14 สัปดาห์ = 98 วัน → 2019-08-31 - 98 วัน = 2019-05-25 → วันที่ >= 2019-05-25 และ <= 2019-08-31
INTERVAL Units ที่ใช้ได้
| Unit | คำอธิบาย |
|---|---|
| MICROSECOND | ไมโครวินาที |
| SECOND | วินาที |
| MINUTE | นาที |
| HOUR | ชั่วโมง |
| DAY | วัน |
| WEEK | สัปดาห์ (7 วัน) |
| MONTH | เดือน |
| QUARTER | ไตรมาส (3 เดือน) |
| YEAR | ปี |
| SECOND_MICROSECOND | วินาที.ไมโครวินาที |
| MINUTE_MICROSECOND | นาที.ไมโครวินาที |
| MINUTE_SECOND | นาที:วินาที |
| HOUR_MICROSECOND | ชั่วโมง.ไมโครวินาที |
| HOUR_SECOND | ชั่วโมง:นาที:วินาที |
| HOUR_MINUTE | ชั่วโมง:นาที |
| DAY_MICROSECOND | วัน.ไมโครวินาที |
| DAY_SECOND | วัน ชั่วโมง:นาที:วินาที |
| DAY_MINUTE | วัน ชั่วโมง:นาที |
| DAY_HOUR | วัน ชั่วโมง |
| YEAR_MONTH | ปี-เดือน |