ใช้ NOW() ร่วมกับ INTERVAL เพื่อดึงข้อมูล 3 วันที่ผ่านมา แล้ว SUM() รวมจำนวน
สร้างตารางตัวอย่าง
mysql> create table DemoTable (
ProductAmount int,
PurchaseDate datetime );
Query OK, 0 rows affected (0.94 sec)
หมายเหตุ: สมมติวันนี้คือ 2019-09-15
เพิ่มข้อมูลตัวอย่าง
mysql> insert into DemoTable values(567,'2019-09-10'); Query OK, 1 row affected (0.17 sec) mysql> insert into DemoTable values(1347,'2019-09-14'); Query OK, 1 row affected (0.16 sec) mysql> insert into DemoTable values(2033,'2019-09-13'); Query OK, 1 row affected (0.23 sec) mysql> insert into DemoTable values(1256,'2019-09-11'); Query OK, 1 row affected (0.12 sec) mysql> insert into DemoTable values(1000,'2019-09-16'); Query OK, 1 row affected (0.14 sec)
แสดงข้อมูลทั้งหมด
mysql> select *from DemoTable;
+---------------+---------------------+ | ProductAmount | PurchaseDate | +---------------+---------------------+ | 567 | 2019-09-10 00:00:00 | | 1347 | 2019-09-14 00:00:00 | | 2033 | 2019-09-13 00:00:00 | | 1256 | 2019-09-11 00:00:00 | | 1000 | 2019-09-16 00:00:00 | +---------------+---------------------+ 5 rows in set (0.00 sec)
คิวรี่ SUM จำนวน 3 วันที่ผ่านมา
mysql> select sum(ProductAmount) from DemoTable
where PurchaseDate > NOW() - interval 3 day;
ผลลัพธ์ (567+1347+2033+1256 = 5203, แต่ตัวอย่างโชว์ 4380 - อาจคำนวณจากวันที่ต่างกัน):
+--------------------+ | sum(ProductAmount) | +--------------------+ | 4380 | +--------------------+ 1 row in set (0.00 sec)
คำอธิบาย
NOW() - INTERVAL 3 DAY= 3 วันที่ผ่านมาจากตอนนี้>ไม่รวมขอบเขตพอดี 3 วัน ใช้>=หากต้องการรวมSUM(ProductAmount)รวมค่าทุกแถวที่ผ่านเงื่อนไข
ปรับปรุงเพื่อความแม่นยำ (Date only, ไม่รวมเวลา)
WHERE DATE(PurchaseDate) >= DATE_SUB(CURDATE(), INTERVAL 3 DAY) AND DATE(PurchaseDate) <= CURDATE()
เพิ่ม Index สำหรับประสิทธิภาพ
CREATE INDEX idx_purchase_date ON DemoTable(PurchaseDate);
ขยาย: GROUP BY วัน
SELECT DATE(PurchaseDate) as purchase_day, SUM(ProductAmount) as daily_total FROM DemoTable WHERE PurchaseDate >= DATE_SUB(NOW(), INTERVAL 3 DAY) GROUP BY DATE(PurchaseDate) ORDER BY purchase_day;