摘要:在本教程中,您將學習如何使用 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 表進行演示。
在結果集上使用 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() 函式應用於結果集中的每一行。
在分割槽上使用 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() 函式訪問當前行之後的行資料。