LAST_VALUE()
是一個 SQL 窗口函數,用于獲取窗口中最后一行的特定列的值
假設我們有一個名為 orders
的表,其中包含以下列:order_id
、customer_id
和 order_date
。我們想要查詢每個客戶的最近訂單日期。這是一個使用 LAST_VALUE()
函數的實際案例:
WITH order_summary AS (
SELECT
customer_id,
order_date,
ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date) AS row_num,
COUNT(*) OVER (PARTITION BY customer_id) AS total_rows
FROM
orders
)
SELECT
customer_id,
LAST_VALUE(order_date) OVER (PARTITION BY customer_id ORDER BY row_num ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS latest_order_date
FROM
order_summary
WHERE
row_num = total_rows;
在這個查詢中,我們首先使用 ROW_NUMBER()
和 COUNT()
窗口函數創建一個名為 order_summary
的臨時表,其中包含每個客戶的訂單日期、行號(按訂單日期排序)以及該客戶的總訂單數。
然后,我們從 order_summary
表中選擇 customer_id
和 LAST_VALUE(order_date)
。LAST_VALUE()
函數根據 row_num
對窗口進行排序,并在當前行及其后面的所有行中查找最后一個 order_date
值。由于我們只關心每個客戶的最后一個訂單日期,因此在 WHERE
子句中指定 row_num = total_rows
。
這將返回一個結果集,其中包含每個客戶的 customer_id
和他們最近的 order_date
。