SQL Server LAG() 函数使用指南
SQL Server LAG()
函数是一种窗口函数,可以用于在查询结果集中访问前一行数据。该函数可用于计算当前行和前一行之间的差异,或者将前一行的数据与当前行数据进行比较。 LAG()
函数在分析数据时非常有用,可以帮助分析人员识别出数据中的趋势和模式。
语法
LAG()
函数的语法如下:
LAG(expression [,offset] [,default]) OVER ( [partition_by_clause] order_by_clause )
其中:
expression
:要访问前一行数据的列或表达式。offset
:要访问的前一行的偏移量,默认为 1。例如,如果 offset 为 2,则LAG()
函数将访问前两行数据。default
:如果要访问的前一行数据不存在,则使用的默认值。默认为 NULL。partition_by_clause
:可选参数,用于分组数据的列或表达式。order_by_clause
:用于指定查询结果集中的列或表达式的排序顺序。
使用场景
LAG()
函数适用于以下场景:
- 计算当前行和前一行之间的差异。
- 将前一行的数据与当前行数据进行比较。
- 识别数据中的趋势和模式。
- 在分析数据时使用滑动窗口函数。
示例
下面是 LAG()
函数的两个示例,包括示例数据和结果。
示例 1
假设有一个名为 sales
的表,其中包含以下数据:
year | quarter | sales |
---|---|---|
2020 | Q1 | 100 |
2020 | Q2 | 200 |
2020 | Q3 | 300 |
2020 | Q4 | 400 |
2021 | Q1 | 500 |
2021 | Q2 | 600 |
2021 | Q3 | 700 |
2021 | Q4 | 800 |
我们可以使用 LAG()
函数计算每个季度的销售额增长率。下面是查询语句和结果:
SELECT year,
quarter,
sales,
LAG(sales, 1) OVER (
ORDER BY year,
quarter
) AS prev_sales,
(
sales - LAG(sales, 1) OVER (
ORDER BY year,
quarter
)
) / LAG(sales, 1) OVER (
ORDER BY year,
quarter
) AS growth_rate
FROM sales;
查询结果:
year | quarter | sales | prev_sales | growth_rate |
---|---|---|---|---|
2020 | Q1 | 100 | NULL | NULL |
2020 | Q2 | 200 | 100 | 1.0000 |
2020 | Q3 | 300 | 200 | 0.5000 |
2020 | Q4 | 400 | 300 | 0 |
示例 2
假设有一个名为 employees
的表,其中包含以下数据:
employee_id | department | salary |
---|---|---|
1 | A | 5000 |
2 | A | 6000 |
3 | B | 7000 |
4 | B | 8000 |
5 | B | 9000 |
6 | C | 10000 |
我们可以使用 LAG()
函数计算每个部门中员工的工资增长率。下面是查询语句和结果:
SELECT employee_id,
department,
salary,
LAG(salary, 1, 0) OVER (
PARTITION BY department
ORDER BY salary
) AS prev_salary,
(
salary - LAG(salary, 1, 0) OVER (
PARTITION BY department
ORDER BY salary
)
) / LAG(salary, 1, 0) OVER (
PARTITION BY department
ORDER BY salary
) AS growth_rate
FROM employees;
查询结果:
employee_id | department | salary | prev_salary | growth_rate |
---|---|---|---|---|
1 | A | 5000 | 0 | 0 |
2 | A | 6000 | 5000 | 0.2000 |
3 | B | 7000 | 0 | 0 |
4 | B | 8000 | 7000 | 0.1429 |
5 | B | 9000 | 8000 | 0.1250 |
6 | C | 10000 | 0 | 0 |
结论
LAG()
函数是一种非常有用的窗口函数,可以用于在查询结果集中访问前一行数据。该函数适用于计算当前行和前一行之间的差异,或者将前一行的数据与当前行数据进行比较。使用 LAG()
函数可以帮助分析人员识别出数据中的趋势和模式,从而更好地理解数据。