SQL Lead 函数

2024年06月26日 SQL Lead 函数 极客笔记

SQL Lead 函数

在SQL中,LEAD()函数是一种用于从当前行到下一行获取数据的窗口函数。它返回排序顺序中当前行之后指定数量的行的某个列的值。

语法

LEAD(column_name, offset, default_value) OVER (PARTITION BY partition_column ORDER BY order_column)

  • column_name: 要获取值的列名
  • offset: 表示要获取的下一行的偏移量。默认为1,表示下一行;可以为正整数或负整数
  • default_value: 可选参数,当offset指定的行不存在时,返回的默认值
  • PARTITION BY: 可选项,用于将结果进行分区计算
  • ORDER BY: 必选项,用于根据某一列对行排序

举例

假设我们有一个名为employees的表,存储了员工的姓名和入职日期。现在我们想计算每名员工下一位员工的入职日期。

CREATE TABLE employees (
    employee_id INT,
    employee_name VARCHAR(100),
    hire_date DATE
);

INSERT INTO employees VALUES
(1, 'Alice', '2021-01-01'),
(2, 'Bob', '2021-02-15'),
(3, 'Charlie', '2020-12-10'),
(4, 'David', '2021-03-20');

现在我们可以使用LEAD()函数来获取每名员工的下一个员工的入职日期:

SELECT 
    employee_name,
    hire_date,
    LEAD(hire_date) OVER (ORDER BY hire_date) AS next_hire_date
FROM employees;

运行以上SQL查询后,我们会得到如下结果:

| employee_name | hire_date  | next_hire_date |
|---------------|------------|----------------|
| Charlie       | 2020-12-10 | 2021-01-01     |
| Alice         | 2021-01-01 | 2021-02-15     |
| Bob           | 2021-02-15 | 2021-03-20     |
| David         | 2021-03-20 | NULL           |

可以看到,通过LEAD()函数,我们成功地计算出了每名员工的下一个员工的入职日期。

使用PARTITION BY

除了上面的示例,LEAD()函数还可以配合PARTITION BY子句进行分区计算。假设我们想计算每名员工同一部门中的下一个员工的入职日期,我们可以这样写:

CREATE TABLE employees (
    employee_id INT,
    employee_name VARCHAR(100),
    department_id INT,
    hire_date DATE
);

INSERT INTO employees VALUES
(1, 'Alice', 1, '2021-01-01'),
(2, 'Bob', 1, '2021-02-15'),
(3, 'Charlie', 2, '2020-12-10'),
(4, 'David', 2, '2021-03-20');

SELECT 
    employee_name,
    hire_date,
    LEAD(hire_date) OVER (PARTITION BY department_id ORDER BY hire_date) AS next_hire_date
FROM employees;

以上查询将根据部门ID分组,计算每名员工同一部门中的下一个员工的入职日期。

本文链接:http://so.lmcjl.com/news/7336/

展开阅读全文