摘要: 在本教學中,您將學習如何使用 SQL LEAD()
函數存取指定實體偏移量(在目前列之後)的列資料。
SQL LEAD() 函數概述
SQL LEAD()
是一個視窗函數,它允許存取指定實體偏移量的列,該列位於目前列之後。
例如,透過使用 LEAD()
函數,您可以從目前列存取下一列的資料,或者存取目前列之後的第二列,或者存取目前列之後的第三列,依此類推。
LEAD()
函數對於計算目前列的值與後續列的值之間的差異非常有用。
LEAD()
函數的語法如下
LEAD(return_value [,offset[, default ]]) OVER (
PARTITION BY expr1, expr2,...
ORDER BY expr1 [ASC | DESC], expr2,...
)
Code language: SQL (Structured Query Language) (sql)
return_value
從目前列偏移之後的下一列的回傳值。
offset
從目前列向前偏移以存取資料的列數。offset
必須是非負整數。如果您沒有指定 offset
,則預設為 1。
default
如果 offset
超出分割範圍,則函數會回傳 default
。 如果您沒有指定 default
,則會回傳 NULL
。
PARTITION BY 子句
PARTITION BY
子句將結果集的列分成多個分割區,LEAD()
函數會套用到這些分割區。 如果您沒有指定 PARTITION BY
子句,則整個結果集會被視為單一分割區。
ORDER BY 子句
ORDER BY
子句會對 LEAD()
函數套用的每個分割區中的列進行排序。
SQL LEAD() 函數範例
我們將使用範例資料庫中的 employees
表格進行演示。
A) 在結果集上使用 SQL LEAD() 函數的範例
以下陳述式會針對公司中的每位員工回傳緊接在該員工之後被僱用的員工的僱用日期
SELECT
first_name,
last_name,
hire_date,
LEAD(hire_date, 1) OVER (
ORDER BY hire_date
) AS next_hired
FROM
employees;
Code language: SQL (Structured Query Language) (sql)
以下顯示輸出結果

在這個範例中,我們省略了 PARTITION BY
子句,因此,整個結果被視為單一分割區。 ORDER BY
子句會依僱用日期升序排列員工。 LEAD()
函數會套用到結果集中的每一列。
B) 在分割區上使用 SQL LEAD() 函數的範例
以下陳述式會針對每位員工提供同部門中緊接在該員工之後被僱用的員工的僱用日期
SELECT
first_name,
last_name,
department_name,
hire_date,
LEAD(hire_date, 1, 'N/A') OVER (
PARTITION by department_name
ORDER BY hire_date
) AS next_hire_date
FROM
employees e
INNER JOIN departments d ON
d.department_id = e.department_id;
Code language: SQL (Structured Query Language) (sql)
以下圖片顯示部分輸出結果

在這個範例中,我們使用了 PARTITION BY
子句,依照部門將員工分成多個分割區,並使用 ORDER BY
子句,依照僱用日期升序排列每個部門中的員工。 LEAD()
函數會獨立套用到每個排序後的分割區,以取得每個部門中員工的下一個僱用日期。
在本教學中,您已經學習如何使用 SQL LEAD()
函數來存取從目前列開始的後續列的資料。