在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()
函数,我们成功地计算出了每名员工的下一个员工的入职日期。
除了上面的示例,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/