employees
的表,其中包含员工的id
、name
和salary
字段。我们可以使用LAG函数来获取每个员工前一个员工的薪水。,,“sql,SELECT id, name, salary, LAG(salary) OVER (ORDER BY id) AS previous_salary,FROM employees;,
`,,这个查询将返回一个结果集,其中包含每个员工的
id、
name、
salary以及前一个员工的
salary(通过
previous_salary`列表示)。 在MySQL中,LAG()
函数是一个窗口函数,它用于访问当前行之前的行的值,这对于计算与前一行的差异或比较连续的行非常有用。
以下是使用LAG()
函数的简单示例:
1. 创建测试数据表和插入数据
我们创建一个名为employees
的数据表,并插入一些数据:
CREATE TABLE employees ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50), salary INT, join_date DATE ); INSERT INTO employees (name, salary, join_date) VALUES ('张三', 5000, '20200101'), ('李四', 6000, '20200201'), ('王五', 7000, '20200301'), ('赵六', 8000, '20200401');
2. 使用LAG()
函数
现在,我们将使用LAG()
函数来获取前一行的薪资(salary)值,并将结果存储在名为previous_salary
的新列中:
SELECT id, name, salary, join_date, LAG(salary) OVER (ORDER BY join_date) AS previous_salary FROM employees;
这将返回以下结果:
id | name | salary | join_date | previous_salary |
1 | 张三 | 5000 | 20200101 | NULL |
2 | 李四 | 6000 | 20200201 | 5000 |
3 | 王五 | 7000 | 20200301 | 6000 |
4 | 赵六 | 8000 | 20200401 | 7000 |
可以看到,previous_salary
列显示了每个员工之前的员工薪资,对于第一个员工(张三),由于没有前一个员工的记录,因此该值为NULL。
注意:在使用LAG()
函数时,需要确保查询的结果集按照某个列进行排序,以便正确访问前一行的数据,在这个例子中,我们按照join_date
列进行排序。
最新评论
本站CDN与莫名CDN同款、亚太CDN、速度还不错,值得推荐。
感谢推荐我们公司产品、有什么活动会第一时间公布!
我在用这类站群服务器、还可以. 用很多年了。