C#高级:数据库中使用SQL作分组处理4(LAG() 偏移函数)
一、定义
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
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;