PlusMagi's Blog By Pitt Phunsanit SQL Server SQL Server: Function LEAD

SQL Server: Function LEAD

ฟังก์ชัน LEAD ใน SQL Server เป็นเครื่องมือที่ทรงพลังมากในกลุ่ม Window Functions ช่วยให้เราสามารถ “ดึงข้อมูลจากแถวถัดไป” มาแสดงในแถวปัจจุบันได้โดยไม่ต้องเขียน Self-join ให้วุ่นวายครับ


LEAD คืออะไร ?

LEAD ใช้สำหรับเข้าถึงข้อมูลในแถวที่อยู่ลำดับถัดลงไปตามเงื่อนไขที่เรากำหนด ส่วนใหญ่มักใช้ในการเปรียบเทียบค่าระหว่างบรรทัด เช่น การหาส่วนต่างของยอดขายรายวัน หรือการดูว่าขั้นตอนถัดไปในระบบ Log คืออะไร

LEAD OVER 
  • scalar_expression: Column ที่เราต้องการดึงค่ามา
  • offset: จะให้ “กระโดด” ไปข้างหน้ากี่แถว
  • default: ถ้าแถวถัดไปไม่มีข้อมูล จะให้แสดงค่าอะไร
  • ORDER BY: เพื่อบอก SQL ว่า “ถัดไป” วัดจากลำดับไหน

ตัวอย่างการใช้งานจริง

สมมติเรามีตารางยอดขายรายวัน DailySales ดังนี้

SaleDateAmount
2024-01-011000
2024-01-021200
2024-01-031100

โจทย์: ต้องการดูยอดขายของ “วันพรุ่งนี้” มาเทียบกับ “วันนี้”

SELECT SaleDate, Amount AS TodaySales, LEAD (Amount, 1, 0) OVER (ORDER BY SaleDate) AS TomorrowSales
FROM DailySales;

ผลลัพธ์ที่ได้

| SaleDate | TodaySales | TomorrowSales |
| :--- | :--- | :--- |
| 2024-01-01 | 1000 | 1200 |
| 2024-01-02 | 1200 | 1100 |
| 2024-01-03 | 1100 | 0 |

การใช้ PARTITION BY

หากคุณมีข้อมูลหลายสาขา หรือหลายสินค้า และต้องการใช้ LEAD แยกตามกลุ่มนั้น ๆ ให้ใช้ PARTITION BY

SELECT StoreID, SaleDate, Amount, LEAD (Amount) OVER (PARTITION BY StoreID ORDER BY SaleDate) AS NextSaleAmount
FROM Sales;

Note: การใช้ Partition จะทำให้ฟังก์ชัน LEAD รีเซ็ตใหม่ทุกครั้งที่เปลี่ยนกลุ่มข้อมูล


ข้อดีของการใช้ LEAD

  1. Performance: ทำงานได้เร็วกว่าการทำ Self-join ในกรณีที่ตารางมีขนาดใหญ่
  2. Readability: Code อ่านง่ายและสั้นลงมาก
  3. Flexibility: สามารถกำหนดค่า Default ได้เอง ทำให้ไม่ต้องมาเขียน ISNULL ครอบอีกชั้น

ข้อควรระวัง

  • ORDER BY: ห้ามลืมเด็ดขาด เพราะถ้าลำดับข้อมูลผิด ค่าที่ดึงมาก็จะผิดความหมายทันที
  • NULL handling: แถวสุดท้ายของชุดข้อมูลจะเป็น NULL เสมอ หากไม่ระบุค่า default ไว้ในฟังก์ชัน

การใช้ LEAD คู่กับฟังก์ชันคู่หูอย่าง LAG จะช่วยให้คุณทำ Report เชิงวิเคราะห์ได้เก่งขึ้นมากครับ!


อ่านเพิ่มเติม

Exit mobile version