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


    一、窗口函数的基本用法

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

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

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

    1. lag和lead分别是向前向后的意思
    2. 参数有三个。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;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    查询结果:
    在这里插入图片描述
    然后将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;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    结果如下:
    在这里插入图片描述

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

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

    SELECT
    	id,
    	date,
    	temperature,
    	LEAD( temperature, 1, 0 ) OVER ( ORDER BY date ) AS temp 
    FROM
    	weather;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    查询结果:
    在这里插入图片描述
    然后将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;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    查询结果:
    在这里插入图片描述

    四、建表数据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;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
  • 相关阅读:
    c++ grpc 第一个用例
    【tg】6: MediaManager的主要功能
    牛客: BM3 链表中的节点每k个一组翻转
    操作系统文件管理-----索引分配
    什么是网络智能运维?如何保障业务7x24小时在线?
    深度学习(2)---循环神经网络(RNN)
    【面试】 C/C++面试题
    人工智能知识全面讲解:简要解析循环神经网络
    TCP三次握手四次分手不一样的解释
    Excel 技巧记录-那些复杂的公式和函数
  • 原文地址:https://blog.csdn.net/shy_1762538422/article/details/126304710