เมื่อตารางเก็บวันที่-เวลา (DATETIME/TIMESTAMP) และต้องการรวมยอด (SUM) ตามวัน (ตัดเวลาออก) ให้ใช้ DATE() ใน GROUP BY
ตัวอย่างการใช้งาน
สร้างตารางขายสินค้า:
mysql> create table DemoTable1358 (PurchaseDate datetime, ProductPrice int);
mysql> insert into DemoTable1358 values('2019-09-20 12:34:00',450),('2019-09-21 11:00:00',1050),('2018-09-21 02:10:00',2050),('2019-09-21 05:20:40',5050),('2016-09-21 04:10:56',1000);
ข้อมูลทั้งหมด (มี 3 รายการวันที่ 21 ก.ย. ปีต่างกัน):
+---------------------+--------------+ | PurchaseDate | ProductPrice | +---------------------+--------------+ | 2019-09-20 12:34:00 | 450 | | 2019-09-21 11:00:00 | 1050 | | 2018-09-21 02:10:00 | 2050 | | 2019-09-21 05:20:40 | 5050 | | 2016-09-21 04:10:56 | 1000 | +---------------------+--------------+
คำสั่งรวมยอดตามวันที่ (เฉพาะส่วนวันที่)
mysql> select PurchaseDate, sum(ProductPrice) from DemoTable1358 group by date(PurchaseDate);
ผลลัพธ์ (วันที่ 21 ก.ย. 2019 รวม 1050+5050=6100)
+---------------------+-------------------+ | PurchaseDate | sum(ProductPrice) | +---------------------+-------------------+ | 2019-09-20 12:34:00 | 450 | | 2019-09-21 11:00:00 | 6100 | | 2018-09-21 02:10:00 | 2050 | | 2016-09-21 04:10:56 | 1000 | +---------------------+-------------------+
คำอธิบาย:
DATE(PurchaseDate)ดึงเฉพาะส่วนวันที่ (YYYY-MM-DD) จาก DATETIMEGROUP BY DATE(PurchaseDate)จัดกลุ่มแถวที่มีวันที่เท่ากัน (แม้เวลาจะต่างกัน)SUM(ProductPrice)รวมราคาในแต่ละกลุ่มวัน- คอลัมน์
PurchaseDateใน SELECT จะแสดงค่าแถวแรกของกลุ่ม (Non-standard) ควรใช้DATE(PurchaseDate) as SaleDateแทน - เพื่อประสิทธิภาพ: สร้าง Index บน
PurchaseDateหรือ Computed/Generated Column สำหรับ DATE