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;
相关推荐
一碗白开水一1 分钟前
Day 5 · 弹性 | 微观
java·前端·数据库
迪飞特科技2 分钟前
大模型接入业务系统:API、本地部署、RAG、智能体四种路线怎么选
java·数据库·人工智能·知识图谱·deepseek·本地化大模型
星轨zb5 分钟前
[专题5]支付发放物品的一致性保障:事务、幂等与状态流转
数据库·后端·mongodb·支付架构学习
保密资质顾问说11 分钟前
保密培训三大误区纠正:从形式主义到持续合规
数据库
泡海椒15 分钟前
JQuick-SQL GROUP BY 聚合:COUNT、SUM、AVG、MIN 与 MAX
数据库·sql
小冯不疯20 分钟前
销售订单同步实战:从聚水潭到金蝶云星空的线上出库单落地
大数据·数据库
qq_4017004131 分钟前
Qt 实时大数据量存储:自己动手实现 TDMS 读写
数据库·qt
Leon-Ning Liu44 分钟前
Oracle参数对比脚本分享:对比 SPFILE 参数与内存参数差异,支持 11g 到 19c
数据库·oracle
涛思数据(TDengine)1 小时前
TDengine TSDB 3.4.3.3 上线:流计算分层闭环、虚拟表跨层引用,查询关联一次写完
数据库·人工智能·数据分析·时序数据库·tdengine·工业
远方16091 小时前
118-五大进程LGWR DBWn CKPT SMON PMON 与存储故障-文件系统对照
大数据·数据库·sql·oracle·database