توابع Lag و Lead در SQL Server

توابع Lag و Lead در SQL Server

برای دسترسی به رکورد قبلی و بعدی یک رکورد در SQL Server، می‌توانید از توابع تحلیلی (Analytic Functions) مانند LEAD و LAG استفاده کنید. این توابع به شما اجازه می‌دهند که به سادگی به رکوردهای همسایه (قبلی و بعدی) در یک مجموعه داده دسترسی پیدا کنید.

1. استفاده از تابع LAG:

تابع LAG به شما این امکان را می‌دهد که به مقدار یک رکورد در ردیف قبلی دسترسی پیدا کنید.

2. استفاده از تابع LEAD:

تابع LEAD به شما این امکان را می‌دهد که به مقدار یک رکورد در ردیف بعدی دسترسی پیدا کنید.

نکات مهم:

  • اگر رکوردی قبلی یا بعدی وجود نداشته باشد، LAG یا LEAD مقدار NULL را برمی‌گرداند.
  • این توابع در SQL Server 2012 و نسخه‌های بعدی در دسترس هستند.

با استفاده از توابع LAG و LEAD، می‌توانید به راحتی به رکوردهای قبلی و بعدی دسترسی پیدا کنید .

بیایید یک مثال کاربردی از توابع LAG و LEAD در SQL Server را بررسی کنیم. فرض کنید که ما یک جدول به نام Sales داریم که شامل اطلاعات فروش محصولات است. این جدول دارای ستون‌های زیر است:

  • SaleID: شناسه فروش
  • SaleDate: تاریخ فروش
  • Amount: مقدار فروش

جدول نمونه Sales

SaleID

SaleDate

Amount

1

2024-01-01

100

2

2024-01-02

150

3

2024-01-03

200

4

2024-01-04

250

5

2024-01-05

300

هدف:

می‌خواهیم برای هر فروش، مقدار فروش روز قبل و روز بعد را نیز نمایش دهیم.

کد SQL:

 

SELECT

    SaleID,

    SaleDate,

    Amount,

    LAG(Amount, 1) OVER (ORDER BY SaleDate) AS PreviousAmount,

    LEAD(Amount, 1) OVER (ORDER BY SaleDate) AS NextAmount

FROM

    Sales;

توضیحات:

  • در این کد:
    • LAG(Amount, 1) OVER (ORDER BY SaleDate) مقدار فروش روز قبل را برمی‌گرداند.
    • LEAD(Amount, 1) OVER (ORDER BY SaleDate) مقدار فروش روز بعد را برمی‌گرداند.
    • ORDER BY SaleDate مشخص می‌کند که رکوردها بر اساس تاریخ فروش مرتب شوند.

نتیجه:

با اجرای این کد، خروجی به شکل زیر خواهد بود:

SaleID

SaleDate

Amount

PreviousAmount

NextAmount

1

2024-01-01

100

NULL

150

2

2024-01-02

150

100

200

3

2024-01-03

200

150

250

4

2024-01-04

250

200

300

5

2024-01-05

300

250

NULL

تحلیل خروجی:

  • برای اولین رکورد (تاریخ 2024-01-01)، چون رکورد قبلی وجود ندارد، PreviousAmount مقدار NULL را برمی‌گرداند و مقدار فروش روز بعد 150 است.
  • برای رکورد دوم (تاریخ 2024-01-02)، مقدار فروش روز قبل 100 و مقدار فروش روز بعد 200 است.
  • این روند برای سایر رکوردها نیز ادامه دارد.

نتیجه‌گیری:

این مثال نشان می‌دهد که چگونه می‌توان با استفاده از توابع LAG و LEAD به سادگی به رکوردهای قبلی و بعدی دسترسی پیدا کرد و اطلاعات بیشتری را در مورد داده‌ها به دست آورد.!

 

 

مرتضی جنگجو

برنامه نویس fullstack با بیش از 14 سال سابقه کار و همکاری در توسعه و پیاده سازی نرم افزارهای تحت وب با تکنولوژی Net. در شرکتهای بزرگ ایرانی، هلندی، فنلاندی و ترکیه

شبکه های اجتماعی نویسنده

دیدگاه کاربران