Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

การดึงข้อมูล 3 วันที่ผ่านมาและ SUM จำนวนใน MySQL

ใช้ 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;