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 函数调用优化
Apr 07 MySQL
mysql死锁和分库分表问题详解
Apr 16 MySQL
Mysql官方性能测试工具mysqlslap的使用简介
May 21 MySQL
MySQL 时间类型的选择
Jun 05 MySQL
教你使用VS Code的MySQL扩展管理数据库的方法
Jan 22 MySQL
深入讲解数据库中Decimal类型的使用以及实现方法
Feb 15 MySQL
浅谈如何保证Mysql主从一致
Mar 13 MySQL
MySQL数据库 任意ip连接方法
May 20 MySQL
sql注入报错之注入原理实例解析
Jun 10 MySQL
数据设计之权限的实现
Aug 05 MySQL
MySQL 原理与优化之Update 优化
Aug 14 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
fleaphp crud操作之findByField函数的使用方法
2011/04/23 PHP
php array_merge函数使用需要注意的一个问题
2015/03/30 PHP
thinkphp多表查询两表有重复相同字段的完美解决方法
2016/09/22 PHP
php中通过eval实现字符串格式的计算公式
2017/03/18 PHP
基于jquery的监控数据是否发生改变
2011/04/11 Javascript
单击复制文字兼容各浏览器的完美解决方案
2013/07/04 Javascript
基于js实现投票的实例代码
2015/08/04 Javascript
AngularJS入门教程之AngularJS模型
2016/04/18 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
2016/10/11 Javascript
BootStrap中关于Select下拉框选择触发事件及扩展
2016/11/22 Javascript
js实现微博发布小功能
2017/01/12 Javascript
element-ui中select组件绑定值改变,触发change事件方法
2018/08/24 Javascript
Vue 监听元素前后变化值实例
2020/07/29 Javascript
[05:05]给小松五分钟系列 第二期介绍为什么打DOTA2
2014/07/02 DOTA
Python编写生成验证码的脚本的教程
2015/05/04 Python
基于wxpython开发的简单gui计算器实例
2015/05/30 Python
python实现二维码扫码自动登录淘宝
2016/12/27 Python
Python实现自动登录百度空间的方法
2017/06/10 Python
Python批处理删除和重命名文件夹的实例
2018/07/11 Python
用Python编写一个高效的端口扫描器的方法
2018/12/20 Python
python腾讯语音合成实现过程解析
2019/08/01 Python
python 子类调用父类的构造函数实例
2020/03/12 Python
乔丹诺(Giordano)酒庄德国官网:找到最好的意大利葡萄酒
2017/12/28 全球购物
Servlet如何得到客户端机器的信息
2014/10/17 面试题
体育专业学生自我评价范文
2014/01/17 职场文书
学校七一活动方案
2014/01/19 职场文书
新护士岗前培训制度
2014/02/02 职场文书
《愚公移山》教学反思
2014/02/20 职场文书
端午节演讲稿
2014/05/23 职场文书
交通违章检讨书
2014/09/21 职场文书
乡镇安全生产月活动总结
2015/05/08 职场文书
道歉情书大全
2015/05/12 职场文书
2015年副班长工作总结
2015/05/15 职场文书
运动会广播稿300字
2015/08/19 职场文书
Mysql中有关Datetime和Timestamp的使用总结
2021/12/06 MySQL
python中validators库的使用方法详解
2022/09/23 Python