首頁  >  文章  >  資料庫  >  MySQL中LAG()函式和LEAD()函式如何使用

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

王林
王林轉載
2023-05-30 21:19:123652瀏覽

一、視窗函數的基本用法

從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

首先,我們對日期進行排序,接著使用lead ()函數將溫度向後推一天,找出當天比後一天溫度高的id。

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, &#39;2022-08-01&#39;, 20);
INSERT INTO `weather` VALUES (2, &#39;2022-08-02&#39;, 25);
INSERT INTO `weather` VALUES (3, &#39;2022-08-03&#39;, 22);
INSERT INTO `weather` VALUES (4, &#39;2022-08-04&#39;, 22);
INSERT INTO `weather` VALUES (5, &#39;2022-08-05&#39;, 26);
INSERT INTO `weather` VALUES (6, &#39;2022-08-06&#39;, 28);
INSERT INTO `weather` VALUES (7, &#39;2022-08-07&#39;, 20);

SET FOREIGN_KEY_CHECKS = 1;

以上是MySQL中LAG()函式和LEAD()函式如何使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除