MySQL中LAG()函数和LEAD()函数的使用


Posted in MySQL onAugust 14, 2022

一、窗口函数的基本用法

从MySQL8之后才开始支持窗口函数

<窗口函数> OVER ([PARTITION BY <用于分组的列>] ORDER BY <用于排序的列>)

二、LAG()和LEAD()函数介绍

  • lag和lead分别是向前向后的意思
  • 参数有三个。expression:列名;offset:偏移量;default_value:超出记录窗口的默认值(默认为null,可以设置为0)

三、数据准备(建表sql在最后)

MySQL中LAG()函数和LEAD()函数的使用

1、LAG()函数:统计与前一天相比温度更高的日期Id

我们先按照日期进行排序,然后找到当天比前一天温度高的id;使用lag()函数,将温度向后推一天。

select id, date, temperature, LAG(temperature, 1, 0) OVER (order by date) as temp FROM weather

查询结果:

MySQL中LAG()函数和LEAD()函数的使用

然后将temperature大于temp 并且temp不等于0的数据挑选出来

select id from (select id, date, temperature, LAG(temperature, 1, 0) OVER (order by date) as temp FROM weather) tmp where temperature>temp and temp != 0;

结果如下:

MySQL中LAG()函数和LEAD()函数的使用

2、LEAD()函数:统计与后一天相比温度更高的日期Id

我们还是先按照日期进行排序,然后找到当天比后一天温度高的id;使用lead()函数,将温度向后推一天。

select id, date, temperature, LEAD(temperature, 1, 0) OVER (order by date) as temp FROM weather

查询结果:

MySQL中LAG()函数和LEAD()函数的使用

然后将temperature大于temp 并且temp不等于0的数据挑选出来

select id from (select id, date, temperature, LEAD(temperature, 1, 0) OVER (order by date) as temp FROM weather) tmp where temperature>temp and temp != 0;

查询结果:

MySQL中LAG()函数和LEAD()函数的使用

四、建表数据sql

DROP TABLE IF EXISTS `weather`;
CREATE TABLE `weather`  (
  `id` int(11) NOT NULL,
  `date` date NULL DEFAULT NULL,
  `temperature` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of weather
-- ----------------------------
INSERT INTO `weather` VALUES (1, '2022-08-01', 20);
INSERT INTO `weather` VALUES (2, '2022-08-02', 25);
INSERT INTO `weather` VALUES (3, '2022-08-03', 22);
INSERT INTO `weather` VALUES (4, '2022-08-04', 22);
INSERT INTO `weather` VALUES (5, '2022-08-05', 26);
INSERT INTO `weather` VALUES (6, '2022-08-06', 28);
INSERT INTO `weather` VALUES (7, '2022-08-07', 20);

SET FOREIGN_KEY_CHECKS = 1;

到此这篇关于MySQL中LAG()函数和LEAD()函数的使用的文章就介绍到这了,更多相关mysql LAG()和LEAD()函数内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
MySQL时间设置注意事项的深入总结
May 06 MySQL
为什么代码规范要求SQL语句不要过多的join
Jun 23 MySQL
MySQL深度分页(千万级数据量如何快速分页)
Jul 25 MySQL
为什么MySQL分页用limit会越来越慢
Jul 25 MySQL
MYSQL 表的全面总结
Nov 11 MySQL
MySQL Innodb索引机制详细介绍
Nov 23 MySQL
Mysql数据库表中为什么有索引却没有提高查询速度
Feb 24 MySQL
一文了解MYSQL三大范式和表约束
Apr 03 MySQL
MySQL事务操作的四大特性以及并发事务问题
Apr 12 MySQL
MySQL 条件查询的常用操作
Apr 28 MySQL
MySQL查询日期时间
May 15 MySQL
MySQL解决Navicat设置默认字符串时的报错问题
Jun 16 MySQL
前端传参数进行Mybatis调用mysql存储过程执行返回值详解
Aug 14 #MySQL
MySQL数据库查询之多表查询总结
Aug 05 #MySQL
分享很少见很有用的SQL功能CORRESPONDING
Aug 05 #MySQL
MySQL存储过程及语法详解
Aug 05 #MySQL
MySQL自定义函数及触发器
Aug 05 #MySQL
MySQL性能指标TPS+QPS+IOPS压测
Aug 05 #MySQL
Mysql中mvcc各场景理解应用
Aug 05 #MySQL
You might like
php中获得视频时间总长度的另一种方法
2011/09/15 PHP
PHP获取指定日期是星期几的实现方法
2016/11/30 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
2019/04/04 PHP
js 模拟实现类似c#下的hashtable的简单功能代码
2010/01/24 Javascript
Javascript 加载和执行-性能提高篇
2012/12/28 Javascript
使用jquery获取网页中图片高度的两种方法
2013/09/26 Javascript
javascript中声明函数的方法及调用函数的返回值
2014/07/22 Javascript
D3.js中data(), enter() 和 exit()的问题详解
2015/08/17 Javascript
Labelauty?jQuery单选框/复选框美化插件分享
2015/09/26 Javascript
如何高效率去掉js数组中的重复项
2016/04/12 Javascript
如何用js实现鼠标向上滚动时浮动导航
2016/07/18 Javascript
js通过指定下标或指定元素进行删除数组的实例
2017/01/12 Javascript
Angular4 中内置指令的基本用法
2017/07/31 Javascript
vue如何通过id从列表页跳转到对应的详情页
2018/05/01 Javascript
CKEditor 4.4.1 添加代码高亮显示插件功能教程【使用官方推荐Code Snippet插件】
2019/06/14 Javascript
鸿蒙系统中的 JS 开发框架
2020/09/18 Javascript
vue 通过base64实现图片下载功能
2020/12/19 Vue.js
[01:01:24]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第三局
2016/02/25 DOTA
python批量生成本地ip地址的方法
2015/03/23 Python
一些Python中的二维数组的操作方法
2015/05/02 Python
在Mac下使用python实现简单的目录树展示方法
2018/11/01 Python
python 获取一个值在某个区间的指定倍数的值方法
2018/11/12 Python
TensorFlow实现从txt文件读取数据
2020/02/05 Python
解决django接口无法通过ip进行访问的问题
2020/03/27 Python
Python web如何在IIS发布应用过程解析
2020/05/27 Python
澳大利亚100%丝绸多彩度假装商店:TheSwankStore
2019/09/04 全球购物
介绍一下javax.servlet.Servlet接口及其主要方法
2015/11/30 面试题
汽车电子与维修专业大学生求职信
2013/09/28 职场文书
生产厂长岗位职责
2014/02/21 职场文书
开展批评与自我批评心得体会
2014/10/17 职场文书
2014年销售部工作总结
2014/12/01 职场文书
关于拾金不昧的感谢信(五篇)
2019/10/18 职场文书
Django drf请求模块源码解析
2021/06/08 Python
python中sqllite插入numpy数组到数据库的实现方法
2021/06/21 Python
Python中的tkinter库简单案例详解
2022/01/22 Python