MYSQL lag()和lead()函数用法

2023-11-15

这两个函数是偏移量函数,可以查出一个字段的前面N个值或者后面N个值,配合over来使用。

下面举例说明,新建表格如下:

drop table if exists exam_record;
CREATE TABLE exam_record (
    id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID',
    uid int NOT NULL COMMENT '用户ID',
    exam_id int NOT NULL COMMENT '试卷ID',
    start_time datetime NOT NULL COMMENT '开始时间',
    submit_time datetime COMMENT '提交时间',
    score tinyint COMMENT '得分'
)CHARACTER SET utf8 COLLATE utf8_general_ci;

INSERT INTO exam_record(uid,exam_id,start_time,submit_time,score) VALUES
(1001, 9001, '2020-01-01 09:01:01', '2020-01-01 09:21:59', 90),
(1002, 9001, '2020-01-20 10:01:01', '2020-01-20 10:10:01', 89),
(1002, 9001, '2020-02-01 12:11:01', '2020-02-01 12:31:01', 83),
(1003, 9001, '2020-03-01 19:01:01', '2020-03-01 19:30:01', 75),
(1004, 9001, '2020-03-01 12:01:01', '2020-03-01 12:11:01', 60),
(1003, 9001, '2020-03-01 12:01:01', '2020-03-01 12:41:01', 90),
(1002, 9001, '2020-05-02 19:01:01', '2020-05-02 19:32:00', 90),
(1001, 9002, '2020-01-02 19:01:01', '2020-01-02 19:59:01', 69),
(1004, 9002, '2020-02-02 12:01:01', '2020-02-02 12:20:01', 99),
(1003, 9002, '2020-02-02 12:01:01', '2020-02-02 12:31:01', 68),
(1001, 9002, '2020-02-02 12:01:01', '2020-02-02 12:43:01', 81),
(1001, 9002, '2020-03-02 12:11:01', null, null);

 1.lag()

  lag(expr,N,default)

  • expr:它可以是列或任何内置函数。
  • N:它是一个正值,它确定当前行之前的行数。如果在查询中将其省略,则其默认值为1
  • default:如果在当前行之前没有行N行的情况下,它是函数返回的默认值。如果缺少,则默认为NULL。
select *,lag(start_time,1) over(order by id)lad_1,
lag(uid,2) over(order by id)lad_2 
from exam_record

 

 可以看到所有的start_time都等于前面一个的start_time,前面没有的填充NULL,设置lag()里面的参数为2,可以看到所有的uid偏移了两个。

select *,lag(start_time,2,0) over(partition by uid order by id)lag_1
from exam_record

 

根据uid分组对start_time向前移动2个单元,然后设置NULL值默认填充为0. 可以自己体会一下数据的移动方式。

2.lead()

lead(expr,N,default)

  • expr:它可以是列或任何内置函数。
  • N:它是一个正值,它确定当前行之后的行数。如果在查询中将其省略,则其默认值为1
  • default:如果在当前行之后没有行N行的情况下,它是函数返回的默认值。如果缺少,则默认为NULL。
select *,lead(start_time,1) over(order by id)lead_1,
lead(uid,2) over(order by id)lead_2 
from exam_record

  可以看到所有的start_time都等于后面一个的start_time,后面没有的填充NULL,设置lead()里面的参数为2,可以看到所有的uid都等于后面第二个的uid。

select *,lead(start_time,1) over(partition by uid order by id)lead_1
from exam_record

 还可以根据uid进行分组,然后再进行偏移。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MYSQL lag()和lead()函数用法 的相关文章

  • MySQL PHP邮政编码比较具体距离

    我试图找出比较一个邮政编码 用户提供的 和一大堆其他邮政编码 现在大约有 200 个邮政编码 之间的距离的最有效方法 相对于加载时间 但它会随着时间的推移而增加 我不需要任何精确的东西 只是在球场上 我下载了整个美国的邮政编码 csv 文件
  • 忽略重复条目并在 EF Core 中的 DbContext.SaveChanges() 上提交成功条目

    我有一个 ASP Net Core 2 2 Web API 在我的一个控制器操作中 我向 MySQL 数据库表添加了一堆行 我使用的是 Pomelo 例如 dbContext AddRange entities dbContext Save
  • 将古吉拉特语文本插入 MySQL 表会产生垃圾字符和不可读的文本

    我有三个 MySQL 表 我正在向其中插入古吉拉特语内容 当我插入两个表时 它们插入得很好并且可读 但在一个表中 它显示垃圾字符 不可读的文本 我怎样才能解决这个问题 MySQL 有每个表的字符集设置 http dev mysql com
  • 在 MySQL 中使用 COUNT 时如何返回 0 而不是 null

    我使用此查询返回存储在 sTable 中的歌曲列表以及存储在 sTable2 中的总项目数 SQL queries Get data to display sQuery SELECT SQL CALC FOUND ROWS str repl
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • gem install mysql:无法构建 gem 本机扩展 (Mac Lion)

    我为 Mac OS X Lion 安装了 MySQL 5 5 27 来自 dmg 现在我尝试安装 mysql gem gem install mysql Building native extensions This could take
  • Mysql 将 int 转换为 MAC

    我有一些数据可以转换 其中有 2 列 其中一列有 IP 它包含整数值 我在 mysql 查询中使用了以下函数 是否有一个函数可以用来转换我的 mac 列 其中包含整数和数据类型是bigint to MAC地址 SELECT INET NTO
  • PDO PHP 连接,致命错误

    我的连接类 firstcode php class DB functions public db function construct try db new PDO mysql localhost dbname xxx charset ut
  • 在 PHP 字符串中格式化 MySQL 代码

    是否有任何程序 IDE 可以在 PHP 字符串中格式化 MySQL 代码 例如 我使用 PHPStorm IDE 但它无法做到这一点 它对 PHP 和 MYSQL 执行此操作 但不适用于 php 字符串内的 MYSQL 我已准备好使用新的
  • 同一配置文件上的两个不同提供程序

    我在用着实体框架 6 1 0 I have 2 家提供者 MysqlClient 和 SQLServerCE 我需要创建2个不同的DBContext 这迫使我创造2个配置类因为mysql有一些不同的东西 但是当我初始化应用程序时 Datab
  • 一次从多个表中删除行

    我正在尝试将 2 个查询合并为一个这样的查询 result db gt query DELETE FROM menu WHERE name new or die db gt error result db gt query DELETE F
  • 在 C# 中,当有人插入、删除或修改记录时,如何从 MySQL 获取事件?

    我正在 WPF Net 中开发一个程序 我需要知道何时有人对数据库的任何表进行更改 这个想法是在数据库发生更改时从数据库接收一个事件 我读了很多文章 但找不到解决我的问题的方法 亲切的问候 最好的解决方案是使用消息队列 在您的应用程序向数据
  • db:schema:load 与 db:migrate 使用 capistrano

    我有一个 Rails 应用程序 我正在将其移动到另一台服务器 我认为我应该使用 db schema load 来创建 mysql 数据库 因为这是推荐的 我的问题是我正在使用 capistrano 进行部署 并且它似乎默认为 rake db
  • Google Cloud SQL 在重新启动时卡住

    我的云 sql 实例长时间处于重新启动状态 在操作窗格中 重新启动的状态显示为待处理 并且还发生了导出 其状态仍为Running 有没有办法可以强制重新启动或取消重新启动或从常规备份中恢复数据 不 没有办法 如果您向 Google 支付高级
  • 不带 GROUP BY 的聚合查询

    这个查询似乎在我的旧机器上完美运行 但是 在我的 MySQL 5 7 14 和 PHP 5 6 25 的新机器上 它会抛出错误 致命错误 未捕获异常 PDOException 并带有消息 SQLSTATE 42000 语法错误或访问冲突 1
  • mysql转储到derby

    我正在使用 derby 在 eclipse 中进行开发 是否可以从 MySQL 转储表并以某种方式将其用于 derby 我知道 ddl 和 dml 对于两个 dbms 来说是不同的 但我正在寻找一种除了转储 导出之外的合适方法 我可以找到两
  • libmysqlclient.a 和 libmysqlclient_r.a 有什么区别?

    我应该使用哪个来链接 mysqlclient 库 它们之间有什么区别 我似乎找不到答案 谢谢 较新版本的 MySQL 客户端发行版不包含 r 版本 有些可能有从 libmyqslclient r a 到 libmyqslclient a 的
  • 使用Perl/DBI/MySQL/InnoDB查找外键信息

    我想以编程方式查找 MySQL 数据库中特定 InnoDB 表的外键 我正在使用 Perl 我偶然发现 dbh gt foreign key info 我刚刚尝试使用它 但似乎有点错误 它不会返回 ON DELETE 和 ON UPDATE
  • 什么时候应该使用 C++ 而不是 SQL?

    我是一名 C 程序员 偶尔使用 MySQL 来处理数据库 但我的 SQL 知识相当有限 但我肯定愿意改变这一点 目前 我正在尝试仅使用 SQL 查询对数据库中的数据进行分析 但我准备放弃了 转而将数据导入到C 中 用C 代码进行分析 我和同
  • 在 jQuery AJAX 成功中从 MySql 获取特定响应

    好吧 我有这个 ajax 代码 它将在 Success 块中返回 MySql 的结果 ajax type POST url index php success function data alert data My Query sql SE

随机推荐

  • Unity_There are 2 audio listeners in the scene.Please ensure there is always exactly one audio......

    分析 这意味着你有两个音频监听器 每个摄像机可能有一个 您一次只能有一个音频侦听器处于活动状态 您必须在相机之间切换时启用 禁用它们 或者删除其中一个 解决方案 您可以通过在heirarchy视图上方的搜索字段中键入AudioListene
  • 【C++】类的小练习

    目录 基本知识 例题1 正方体 完整代码 不足 例题2 点与圆 要点 完整代码 头文件point h 源文件 基本知识 class 类名 访问权限 属性 参数 行为 函数 注 类中的属性和行为统称为成员 属性 也称 成员属性 成员变量 行为
  • Binder机制详解(三)

    系列目录 Binder机制详解 一 Binder机制详解 二 文章目录 前言 一 Binder机制理解 二 应用层 1 Linux下的进程通信 2 binder通信 3 stub 4 流程总结 三 native层 1 Binder基于mma
  • 【计算机视觉

    文章目录 一 分割 语义相关 18篇 1 1 TomatoDIFF On plant Tomato Segmentation with Denoising Diffusion Models 1 2 CGAM Click Guided Att
  • k8s跨namespace复制pvc方式之一

    前言 今天发现小伙伴把mysql的pod部署到了default命名空间下 而且已经用了好久 而恰巧我们清理k8s空间 就把他pod删了 小伙伴很恼火 哈哈哈哈 default命名空间禁止部署业务pod 幸好pvc还在 那如何把default
  • 如何用 Github Pages 免费部署静态站点

    最低成本部署静态网站 所谓静态网站 是指它所有内容都是静态的 即预先编写好并存储在服务器上 访问者获取到的是事先准备好的静态文件 所以完全不需要购买服务器 除了域名之外 几乎不会有其他花销 我在构建五个静态站点的过程中 积累了大量经验 本篇
  • sql uniqueidentifier转换成varchar 数据类型

    塗聚文 Geovin Du DECLARE myid uniqueidentifier SET myid NEWID SELECT CONVERT char 255 myid AS char GO 塗聚文 Geovin Du declare
  • css背景图片和背景颜色一起显示

    如果需要在一个元素中既要显示背景图片也要显示背景颜色 我们都知道背景图片可以使用background image url 来指定 也可以省略image 但是如果我们既显示背景图片又要显示背景颜色 那么我们可以将background url
  • 使用grep 过滤logcat输出

    转自 http www xmumu com post 2012 02 15 15478732 如何过滤 adb logcat 输出 简介 本文介绍如何在shell 命令行中过滤 adb logcat 输出的几个小技巧 开发当中经常看到别人的
  • 自定义busybox文件系统存在的问题

    1 串口终端看不到命令行入口 只能在显示器端HDMI 看到 2 内核默认无法加载除了busybox openwrt文件系统 debian ubuntu无法加载
  • 缓冲转换流

    只用字符流时可能出现乱码 而转换流可以解决这个问题 再加上缓冲流又可以提高效率 import java io BufferedReader import java io BufferedWriter import java io FileI
  • C++&QT-day5

    作业 多重继承 1 定义一个学生类 Student 私有成员属性 姓名 年龄 分数 成员方法 无参构造 有参构造 析构函数 show函数 2 再定义一个党员类 Party 私有成员属性 党组织活动 组织 成员方法 无参构造 有参构造 析构函
  • python封装一个logging模块,可以直接使用

    记录下遇到的问题以及解决方法 日志等级 等级 等级代码 翻译 NOTSET 0 未设置 DEBUG 10 调试 INFO 20 信息 WARNING 30 警告 WARN 30 警告 ERROR 40 错误 CRITICAL 50 至关重要
  • 【论文阅读】Multimodal Fusion with Co-Attention Networks for Fake News Detection --- 虚假新闻检测,多模态融合

    本博客系本人理解该论文之后所写 非逐句翻译 预知该论文详情 请参阅论文原文 论文标题 Multimodal Fusion with Co Attention Networks for Fake News Detection 作者 Yang
  • 学深度学习可以做什么?可以从事什么工作?

    学习深度学习可以让您涉足人工智能领域的前沿 为各种领域带来巨大的创新和改进机会 深度学习的核心思想是通过多层神经网络模拟人类大脑的工作方式 从而实现对复杂数据的高级处理和理解 这为以下方面的应用提供了广泛的可能性 学深度学习可以做什么 首先
  • 分布式爬虫学习笔记

    安装python 虚拟环境 将使用python2 3的项目分开 1 安装virtualenvcmd cmd命令 pip install virtualenv 2 因为下载开发包很慢 所以下载开发包的第三方镜像 python豆瓣源 百度 安装
  • 精品,全网最详细-软件测试技术自动化测试总结,最屌详解看了默默卷起来

    目录 导读 一 自动化测试 二 自动化测试的意义 三 手工测试的局限性 四 自动化测试带来的好处 五 自动化测试的前提条件 1 需求变动不频繁 2 项目周期足够长 3 自动化测试脚本可重复使用 4 手工测试无法完成 六 自动化测试的方法 七
  • 使用Python编写一个多线程的12306抢票程序

    国庆长假即将到来 大家纷纷计划着自己的旅行行程 然而 对于很多人来说 抢购火车票人们成了一个令人头疼的问题 12306网站的服务器经常因为流量高而崩溃 导致抢票变得越来越严重异常困难 首先 让我们来了解一下12306抢票的难点 由于很多人都
  • 程序员的职级和薪酬体系

    今天我们要讨论一个程序员都关心的话题 学了程序到底能赚多少钱 老有人问学程序到底有没有前途 我应该是学前端呢 还是应该学大数据 程序员百万年薪到底有多难 其实 这些问题抛开兴趣的本质都在问一个问题 当了程序员能赚多少钱 我相信广大程序员的力
  • MYSQL lag()和lead()函数用法

    这两个函数是偏移量函数 可以查出一个字段的前面N个值或者后面N个值 配合over来使用 下面举例说明 新建表格如下 drop table if exists exam record CREATE TABLE exam record id i