การใช้ฟังก์ชัน LAG() ใน MySQL
การใช้ฟังก์ชัน LAG() ใน MySQL สามารถช่วยให้คุณดึงข้อมูลจากแถวก่อนหน้ามาใช้งานได้ ในกรณีที่คุณต้องการดูค่าของฟิลด์ในแถวก่อนหน้าในผลลัพธ์ของคุณ เช่น การคำนวณการเปลี่ยนแปลงของค่าในแถวปัจจุบันเทียบกับแถวก่อนหน้า
ตัวอย่างการใช้งาน LAG() ใน MySQL
สมมติว่าคุณมีตาราง
ตอนนี้คุณต้องการดูการเปลี่ยนแปลงของยอดขายแต่ละวันเมื่อเทียบกับวันก่อนหน้า คุณสามารถใช้ฟังก์ชัน LAG() ดังนี้
ผลลัพธ์จะเป็น
ในตัวอย่างนี้
LAG() มีใน MySQL เวอร์ชั่นไหน
ฟังก์ชัน LAG() ถูกเพิ่มเข้ามาใน MySQL ตั้งแต่เวอร์ชัน 8.0 เป็นต้นไป ดังนั้น หากคุณต้องการใช้ฟังก์ชันนี้ คุณจำเป็นต้องใช้ MySQL 8.0 หรือเวอร์ชันที่ใหม่กว่า
ฟังก์ชัน LAG() เป็นฟังก์ชันหน้าต่าง (Window Function) ที่ช่วยให้คุณสามารถเข้าถึงค่าของแถวก่อนหน้าในชุดผลลัพธ์ได้ ซึ่งทำให้การคำนวณค่าเปลี่ยนแปลงหรือการเปรียบเทียบระหว่างแถวทำได้ง่ายขึ้นมาก
หากคุณใช้งาน MySQL เวอร์ชันที่เก่ากว่า 8.0 คุณอาจต้องใช้วิธีการอื่นในการคำนวณ เช่น การใช้ subquery หรือการ join ตารางตัวเอง ซึ่งจะซับซ้อนและทำงานช้ากว่า
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับฟังก์ชัน LAG() ใน MySQL คุณสามารถดูได้ที่ MySQL 8.0 Reference Manual
ตัวอย่างการใช้งาน 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