一、定义
1. 偏移函数定义
访问结果集中其他行的数据
2. LAG语法
获取 前N行 的值:LAG(列名, 偏移量=N=1, 默认值=NULL) OVER (PARTITION BY 分组字段 ORDER BY 排序字段)
3. LEAD语法
获取 后N行 的值:LEAD(列名, 偏移量=N=1, 默认值=NULL) OVER(PARTITION BY 分组字段 ORDER BY 排序字段)
提示:偏移量和默认值可以不传,本身就有默认
二、场景举例
假设存在
学生成绩表:ID StuID Score Time
我需要查询:ID StuID Score Time 上次的分数 上次的考试时间 下次的分数 下次的考试时间
(如果不存在上次或者下次成绩,返回-1即可)
三、SQL
sql
SELECT
ID,
StuID,
Score,
Time,
ISNULL(LAG(Score) OVER (PARTITION BY StuID ORDER BY Time), -1) AS 上次的分数,
LAG(Time) OVER (PARTITION BY StuID ORDER BY Time) AS 上次的考试时间,
ISNULL(LEAD(Score) OVER (PARTITION BY StuID ORDER BY Time), -1) AS 下次的分数,
LEAD(Time) OVER (PARTITION BY StuID ORDER BY Time) AS 下次的考试时间
FROM
学生成绩表
ORDER BY
StuID, Time;
