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;
相关推荐
pipip.1 小时前
Redis vs MongoDB:内存字典与文档库对决
数据库·redis·缓存
小白银子2 小时前
零基础从头教学Linux(Day 62)
数据库·mysql·oracle
Boilermaker19925 小时前
【MySQL 进阶】高性能优化
数据库·sql·mysql
CoderOnly6 小时前
SQL,CROSS JOIN速度优化
数据库·sql·mysql
Highcharts.js6 小时前
入门指南|从文件到图表:Highcharts对接数据库(CSV、Excel)实现数据同步绘制图表
数据库·excel·数据同步·highcharts·数据对接·文件导入
老衲提灯找美女8 小时前
MySQL的增删改查功能合集
数据库·mysql·增删改查·增删改查详细用法
SelectDB9 小时前
Apache Doris 4.0.1 版本正式发布
数据库·apache
Doro再努力9 小时前
MySQL数据库07:分组查询与分类查询
数据库·mysql
Elastic 中国社区官方博客10 小时前
Elasticsearch:如何为 Elastic Stack 部署 E5 模型 - 下载及隔离环境
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
间彧10 小时前
SpringBoot + MyBatis-Plus + Dynamic-Datasource 读写分离完整指南
数据库·后端