Window Frame زیرمجموعهای از ردیفها را در یک پارتیشن تعریف میکند که یک Window Function روی آن کار میکند و مشخص می کند که کدام ردیف ها در محاسبه نسبت به ردیف فعلی گنجانده شده اند. Window Frame با استفاده از ROWS یا RANGE در عبارت OVER هنگام استفاده از Window Functionها در SQL تعریف می شود.
بیایید Window Frame را با یک مثال بررسی کنیم:
فرض کنید جدولی به نام sales با داده های زیر دارید:
Sale_Date | Sales_Amount |
2023-01-01 | 100 |
2023-01-02 | 150 |
2023-01-03 | 200 |
2023-01-04 | 50 |
2023-01-05 | 300 |
شما می خواهید مجموع Sales_Amount را برای هر ردیف با در نظر گرفتن دو ردیف قبلی و ردیف فعلی محاسبه کنید.
این بدان معنی است که شما می خواهید مجموع Sales_Amount را برای ردیف فعلی و دو ردیف قبل از آن در همان "پارتیشن" محاسبه کنید.
در اینجا کوئری SQL برای رسیدن به این هدف با استفاده از عبارت ROWS برای تعریف Window Frame آمده است:
SELECT
Sale_Date,
Sales_Amount,
SUM(Sales_Amount) OVER(ORDER BY Sale_Date ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS Cumulative_Sum
FROM sales
ORDER BY Sale_Date;
در این کوئری:
ORDER BY Sale_Date ترتیب پردازش ردیفها در پارتیشن را مشخص میکند و اطمینان میدهد که آنها به ترتیب زمانی پردازش میشوند.
ROWS BETWEEN 2 PRECEDING AND CURRENT ROW ردیف های بین 2 ردیف قبلی و فعلی Window Freame را مشخص می کند. این شامل ردیف فعلی (CURRENT ROW) و دو ردیف بلافاصله قبل از آن (2 PRECEDING) است.
نتیجه این است:
Sale_Date | Sales_Amount | Cumulative_Sum |
2023-01-01 | 100 | 100 |
2023-01-02 | 150 | 250 |
2023-01-03 | 200 | 450 |
2023-01-04 | 50 | 400 |
2023-01-05 | 300 | 550 |
همانطور که می بینید، Widnow Frame مشخص شده توسط ROWS BETWEEN 2 PRECEDING AND CURRENT ROW تضمین می کند که Window Function مجموع تجمعی هر ردیف (ردیف فعلی و دو ردیف قبل از آن) را محاسبه می کند.
این فقط یک نمونه از این است که چگونه می توانید از Window Frame برای انجام محاسبات در زیر مجموعه خاصی از ردیف ها در داده های خود استفاده کنید.