
توابع 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 به سادگی به رکوردهای قبلی و بعدی دسترسی پیدا کرد و اطلاعات بیشتری را در مورد دادهها به دست آورد.!
دیدگاه کاربران