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;
相关推荐
jiayou6410 小时前
KingbaseES 表级与列级加密完全指南
数据库·后端
GBASE1 天前
G术时刻 |GBase 8s数据库事务并发控制之封锁技术介绍(下)
数据库
xiezhr2 天前
逛GitHub发现了一款免费的带AI功能的数据库管理工具
数据库·ai编程·dba
吃糖的小孩3 天前
给 QQ AI 机器人设计“可控记忆”:会话摘要、手动长期记忆与角色卡边界
数据库
笃行3503 天前
金仓数据库数据安全双防线:静态存储加密与传输加密实战
数据库
笃行3503 天前
金仓数据库物理备份实战:sys_rman 全流程演练与误覆盖抢救
数据库
笃行3503 天前
金仓数据库逻辑备份实战:从全库导出到 Schema 替换的完整闭环
数据库
SelectDB4 天前
阶跃星辰基于 SelectDB 构建 PB 级 Agent 可观测平台
大数据·数据库·aigc
这个DBA有点耶4 天前
GROUP BY优化全解:如何写出既不丢数据又飞快的分组查询
数据库·mysql·架构