MySQL中LAG()函数和LEAD()函数如何使用

网友投稿 1394 2023-07-04

MySQL中LAG()函数和LEAD()函数如何使用

MySQL中LAG()函数和LEAD()函数如何使用

一、窗口函数的基本用法

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

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

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

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

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

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

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

select id, date, temperature, LAG(temperature, 1, 0) OVER (order by date) as temp FROM weather登录后复制

查询结果:

然后将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;登录后复制

结果如下:

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

首先,我们对日期进行排序,接着使用lead()函数将温度向后推一天,并找出当天比后一天温度高的id。

select id, date, temperature, LEAD(temperature, 1, 0) OVER (order by date) as temp FROM weather登录后复制

查询结果:

然后将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;登录后复制

查询结果:

四、建表数据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;登录后复制

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:node+mysql数据库连接池连接的方法是什么
下一篇:如何配置MySQL端口避免被占用
相关文章