last_value 是一個窗口函數,它用于獲取窗口內某列的最后一個值
以下是 last_value 函數的基本語法:
LAST_VALUE(column) OVER (
[PARTITION BY partition_column1, partition_column2, ...]
ORDER BY order_column1, order_column2, ...
[ROWS/RANGE frame_clause]
)
column:要獲取最后一個值的列。PARTITION BY:可選項,用于指定分區列。根據這些列的值,結果集將被劃分為多個分區,每個分區都會單獨計算 last_value。ORDER BY:用于指定排序列。last_value 會根據這些列的值來確定哪一行是窗口內的最后一行。ROWS/RANGE:可選項,用于指定窗口范圍。它決定了 last_value 函數應該在哪些行上進行計算。以下是一個使用 last_value 函數的示例:
WITH sales_data AS (
SELECT
employee_id,
sale_date,
sale_amount
FROM
sales
)
SELECT
employee_id,
sale_date,
sale_amount,
LAST_VALUE(sale_amount) OVER (
PARTITION BY employee_id
ORDER BY sale_date
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
) as last_sale_amount
FROM
sales_data;
在這個示例中,我們首先創建了一個名為 sales_data 的臨時表,包含 employee_id、sale_date 和 sale_amount 列。然后,我們使用 LAST_VALUE 函數,按照 employee_id 對數據進行分區,并按照 sale_date 對每個分區內的數據進行排序。ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING 子句表示窗口范圍包括分區內的所有行。最后,我們選擇 employee_id、sale_date、sale_amount 和計算出的 last_sale_amount 列。