การใช้ฟังก์ชัน LAG() ใน MySQL
ตัวอย่างการใช้งาน LAG() ใน MySQL
สมมติว่าคุณมีตาราง
sales
ดังนี้CREATE TABLE sales (
id INT AUTO_INCREMENT PRIMARY KEY,
sale_date DATE,
amount DECIMAL(10, 2)
);
INSERT INTO sales (sale_date, amount) VALUES
('2023-01-01', 100.00),
('2023-01-02', 150.00),
('2023-01-03', 200.00),
('2023-01-04', 250.00),
('2023-01-05', 300.00);
sqlตอนนี้คุณต้องการดูการเปลี่ยนแปลงของยอดขายแต่ละวันเมื่อเทียบกับวันก่อนหน้า คุณสามารถใช้ฟังก์ชัน LAG() ดังนี้
SELECT
sale_date,
amount,
LAG(amount) OVER (ORDER BY sale_date) AS previous_amount,
amount - LAG(amount) OVER (ORDER BY sale_date) AS change_amount
FROM
sales;
ผลลัพธ์จะเป็น
+------------+--------+-----------------+--------------+
| sale_date | amount | previous_amount | change_amount|
+------------+--------+-------- --------+--------------+
| 2023-01-01 | 100.00 | NULL | NULL |
| 2023-01-02 | 150.00 | 100.00 | 50.00 |
| 2023-01-03 | 200.00 | 150.00 | 50.00 |
| 2023-01-04 | 250.00 | 200.00 | 50.00 |
| 2023-01-05 | 300.00 | 250.00 | 50.00 |
+------------+--------+----------------+--------------+
ในตัวอย่างนี้
LAG(amount) OVER (ORDER BY sale_date)
จะดึงค่าของamount
จากแถวก่อนหน้าโดยเรียงลำดับตามsale_date
amount - LAG(amount) OVER (ORDER BY sale_date)
จะคำนวณการเปลี่ยนแปลงของยอดขายแต่ละวันเทียบกับวันก่อนหน้า
LAG() มีใน MySQL เวอร์ชั่นไหน
ฟังก์ชัน LAG() ถูกเพิ่มเข้ามาใน MySQL ตั้งแต่เวอร์ชัน 8.0 เป็นต้นไป ดังนั้น หากคุณต้องการใช้ฟังก์ชันนี้ คุณจำเป็นต้องใช้ MySQL 8.0 หรือเวอร์ชันที่ใหม่กว่า
ฟังก์ชัน LAG() เป็นฟังก์ชันหน้าต่าง (Window Function) ที่ช่วยให้คุณสามารถเข้าถึงค่าของแถวก่อนหน้าในชุดผลลัพธ์ได้ ซึ่งทำให้การคำนวณค่าเปลี่ยนแปลงหรือการเปรียบเทียบระหว่างแถวทำได้ง่ายขึ้นมาก
หากคุณใช้งาน MySQL เวอร์ชันที่เก่ากว่า 8.0 คุณอาจต้องใช้วิธีการอื่นในการคำนวณ เช่น การใช้ subquery หรือการ join ตารางตัวเอง ซึ่งจะซับซ้อนและทำงานช้ากว่า
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับฟังก์ชัน LAG() ใน MySQL คุณสามารถดูได้ที่ MySQL 8.0 Reference Manual