تابع پنجره ای LAST_VALUE در SQL: توضیح جامع با مثال
تابع LAST_VALUE
یکی از توابع پنجره ای در SQL است که برای یافتن آخرین مقدار در یک مجموعه مرتب شده از مقادیر استفاده می شود. این تابع در کنار توابع دیگر پنجره ای مانند FIRST_VALUE
، LAG
و NTH_VALUE
قرار می گیرد و برای انجام محاسبات تحلیلی قدرتمند بر روی مجموعه های داده درون گروه ها یا دسته ها کاربرد دارد.
نحو کلی:
SQL
LAST_VALUE(expression) OVER (window_definition)
در این عبارت:
expression
: عبارتی که می خواهید مقدار آن برای هر سطر محاسبه شود.window_definition
: تعریفی از پنجره ای است که تابع در آن عمل می کند. این تعریف شامل جزئیاتی مانند نحوه پارتیشن بندی داده ها، ترتیب دهی و محدوده پنجره می باشد.
مثال ۱: یافتن آخرین قیمت سهم در هر روز
فرض کنید جدولی به نام stock_prices
داریم که شامل ستون های date
(تاریخ)، symbol
(نماد سهم) و price
(قیمت) می باشد. می خواهیم آخرین قیمتی را که هر سهم در هر روز داشته است، بدست آوریم.
SQL
SELECT date, symbol, price,
LAST_VALUE(price) OVER (PARTITION BY symbol ORDER BY date) AS last_price
FROM stock_prices;
در این مثال:
- داده ها بر اساس ستون
symbol
پارتیشن بندی می شوند، به این معنی کهLAST_VALUE
برای هر نماد سهم به طور جداگانه محاسبه می شود. - داده ها بر اساس ستون
date
به ترتیب صعودی مرتب می شوند، به این معنی کهLAST_VALUE
آخرین قیمت را در هر روز برای هر سهم پیدا می کند. - ستون جدیدی به نام
last_price
اضافه می شود که آخرین قیمت هر سهم در هر روز را نشان می دهد.
مثال ۲: یافتن بالاترین موجودی انبار در هر ماه
فرض کنید جدولی به نام inventory
داریم که شامل ستون های product_id
(شناسه محصول)، month
(ماه) و quantity
(موجودی) می باشد. می خواهیم بالاترین موجودی را که هر محصول در هر ماه داشته است، بدست آوریم.
SQL
SELECT product_id, month, quantity,
LAST_VALUE(quantity) OVER (PARTITION BY product_id ORDER BY month DESC) AS max_quantity
FROM inventory;
در این مثال:
- داده ها بر اساس ستون
product_id
پارتیشن بندی می شوند. - داده ها بر اساس ستون
month
به ترتیب نزولی مرتب می شوند، به این معنی کهLAST_VALUE
بالاترین موجودی را در هر ماه برای هر محصول پیدا می کند. - ستون جدیدی به نام
max_quantity
اضافه می شود که بالاترین موجودی هر محصول در هر ماه را نشان می دهد.
نکات مهم:
- توابع پنجره ای به طور ذاتی بر روی مجموعه های نتیجه مرتب شده عمل می کنند. اطمینان حاصل کنید که قبل از استفاده از توابع پنجره ای، داده های خود را بر اساس ستون مورد نظر مرتب سازی کنید.
- می توانید از عبارت های مختلفی مانند
ROWS BETWEEN
وPRECEDING
برای تعریف دقیق تر پنجره استفاده کنید. - توابع پنجره ای قدرتمند هستند و می توانند برای انجام محاسبات پیچیده تحلیلی بر روی داده ها استفاده شوند. با کمی تمرین می توانید از آنها برای حل طیف وسیعی از مسائل تحلیلی استفاده کنید.
منابع مفید:
- http://www-db.deis.unibo.it/courses/TW/DOCS/w3schools/sql/sql_func_last.asp.html
- https://www.geeksforgeeks.org/window-functions-in-sql/
- https://stackoverflow.com/questions/15434934/difference-between-the-first-value-and-the-last-values-of-the-each-days