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

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;
相关推荐
2501_9411481513 小时前
多语言微服务架构与边缘计算技术实践:Python、Java、C++、Go深度解析
数据库
w***z5014 小时前
MYSQL 创建索引
数据库·mysql
章鱼哥73015 小时前
[特殊字符] SpringBoot 自定义系统健康检测:数据库、Redis、表统计、更新时长、系统性能全链路监控
java·数据库·redis
5***E68515 小时前
MySQL:drop、delete与truncate区别
数据库·mysql
记得记得就15115 小时前
【MySQL数据库管理】
数据库·mysql·oracle
Austindatabases16 小时前
给PG鸡蛋里面挑骨头--杭州PostgreSQL生态大会
数据库·postgresql
秃了也弱了。16 小时前
MySQL空间函数详解,MySQL记录经纬度并进行计算
android·数据库·mysql
星环处相逢16 小时前
MySQL数据库管理从入门到精通:全流程实操指南
数据库·mysql
h***047717 小时前
SpringBoot集成Flink-CDC,实现对数据库数据的监听
数据库·spring boot·flink
源来猿往17 小时前
redis-架构解析
数据库·redis·缓存