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 相关文章推荐
详解GaussDB for MySQL性能优化
May 18 MySQL
详解Mysql和Oracle之间的误区
May 18 MySQL
MySQL查看表和清空表的常用命令总结
May 26 MySQL
MySQL5.7并行复制原理及实现
Jun 03 MySQL
MySQL8.0.18配置多主一从
Jun 21 MySQL
SQL实现LeetCode(176.第二高薪水)
Aug 04 MySQL
MySQL图形化管理工具Navicat安装步骤
Dec 04 MySQL
JMeter对MySQL数据库进行压力测试的实现步骤
Jan 22 MySQL
排查并解决MySQL生产库内存使用率高的报警
Apr 11 MySQL
MySQL数据库实验实现简单数据库应用系统设计
Jun 21 MySQL
MySQL分布式恢复进阶
Jul 23 MySQL
MySQL索引失效场景及解决方案
Jul 23 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
下载文件的点击数回填
2006/10/09 PHP
php设计模式之单例、多例设计模式的应用分析
2013/06/30 PHP
jquery select操作的日期联动实现代码
2009/12/06 Javascript
Javascript学习笔记-详解in运算符
2011/09/13 Javascript
js带按钮的提示框可供选择示例代码
2013/09/17 Javascript
使用JS读秒使用示例
2013/09/21 Javascript
javascript计算用户打开网页的停留时间
2014/01/09 Javascript
关闭浏览器输入框自动补齐 兼容IE,FF,Chrome等主流浏览器
2014/02/11 Javascript
javascript数组详解
2014/10/22 Javascript
JS三级可折叠菜单实现方法
2016/02/29 Javascript
node.js爬虫爬取拉勾网职位信息
2017/03/14 Javascript
使用jQuery和ajax代替iframe的方法(详解)
2017/04/12 jQuery
layui选项卡效果实现代码
2017/05/19 Javascript
Nodejs异步流程框架async的方法
2019/06/07 NodeJs
使用xampp将angular项目运行在web服务器的教程
2019/09/16 Javascript
vue css 引入asstes中的图片无法显示的四种解决方法
2020/03/16 Javascript
JavaScript中window和document用法详解
2020/07/28 Javascript
Vue3配置axios跨域实现过程解析
2020/11/25 Vue.js
python使用PyV8执行javascript代码示例分享
2013/12/04 Python
跟老齐学Python之Import 模块
2014/10/13 Python
利用Python如何制作好玩的GIF动图详解
2018/07/11 Python
Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能
2018/11/23 Python
详解python中init方法和随机数方法
2019/03/13 Python
python读写csv文件并增加行列的实例代码
2019/08/01 Python
python实现快递价格查询系统
2020/03/03 Python
HTML5实现晶莹剔透的雨滴特效
2014/05/14 HTML / CSS
全球速卖通:AliExpress(国际版淘宝)
2017/09/20 全球购物
ASICS印度官方网站:日本专业运动品牌
2020/06/20 全球购物
乌克兰设计师和品牌的服装:Love&Live
2020/04/14 全球购物
机电专业毕业生求职信
2013/10/27 职场文书
广告语设计及教案
2014/03/21 职场文书
保护环境倡议书500字
2014/05/19 职场文书
颐和园英文导游词
2015/01/30 职场文书
详解Redis主从复制实践
2021/05/19 Redis
MySQL快速插入一亿测试数据
2021/06/23 MySQL
java实现web实时消息推送的七种方案
2022/07/23 Java/Android