MySQL中LAG()函數(shù)和LEAD()函數(shù)的使用
一、窗口函數(shù)的基本用法
從MySQL8之后才開始支持窗口函數(shù)
<窗口函數(shù)> OVER ([PARTITION BY <用于分組的列>] ORDER BY <用于排序的列>)
二、LAG()和LEAD()函數(shù)介紹
- lag和lead分別是向前向后的意思
- 參數(shù)有三個(gè)。expression:列名;offset:偏移量;default_value:超出記錄窗口的默認(rèn)值(默認(rèn)為null,可以設(shè)置為0)
三、數(shù)據(jù)準(zhǔn)備(建表sql在最后)
1、LAG()函數(shù):統(tǒng)計(jì)與前一天相比溫度更高的日期Id
我們先按照日期進(jìn)行排序,然后找到當(dāng)天比前一天溫度高的id;使用lag()函數(shù),將溫度向后推一天。
select id, date, temperature, LAG(temperature, 1, 0) OVER (order by date) as temp FROM weather
查詢結(jié)果:
然后將temperature大于temp 并且temp不等于0的數(shù)據(jù)挑選出來
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;
結(jié)果如下:
2、LEAD()函數(shù):統(tǒng)計(jì)與后一天相比溫度更高的日期Id
我們還是先按照日期進(jìn)行排序,然后找到當(dāng)天比后一天溫度高的id;使用lead()函數(shù),將溫度向后推一天。
select id, date, temperature, LEAD(temperature, 1, 0) OVER (order by date) as temp FROM weather
查詢結(jié)果:
然后將temperature大于temp 并且temp不等于0的數(shù)據(jù)挑選出來
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;
查詢結(jié)果:
四、建表數(shù)據(jù)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;
到此這篇關(guān)于MySQL中LAG()函數(shù)和LEAD()函數(shù)的使用的文章就介紹到這了,更多相關(guān)mysql LAG()和LEAD()函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL橫縱表相互轉(zhuǎn)化操作實(shí)現(xiàn)方法
這篇文章主要介紹了MySQL橫縱表相互轉(zhuǎn)化操作,結(jié)合實(shí)例形式分析了MySQL橫縱表相互轉(zhuǎn)化操作基本原理、實(shí)現(xiàn)方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2020-06-06mysql 修改密碼和設(shè)置允許遠(yuǎn)程登錄
這篇文章主要介紹了mysql 修改密碼和設(shè)置允許遠(yuǎn)程登錄的相關(guān)資料,需要的朋友可以參考下2015-07-07MySQL查看和優(yōu)化數(shù)據(jù)庫(kù)實(shí)例詳細(xì)信息的命令
本文詳細(xì)介紹了如何查看?MySQL?數(shù)據(jù)庫(kù)實(shí)例的信息,包括基本信息、配置參數(shù)、運(yùn)行進(jìn)程和性能監(jiān)控等方面,通過多個(gè)代碼示例,讀者可以掌握查看和管理數(shù)據(jù)庫(kù)實(shí)例的具體操作,這些方法和工具對(duì)于數(shù)據(jù)庫(kù)管理和維護(hù)非常重要,可以幫助我們確保數(shù)據(jù)庫(kù)的健康運(yùn)行2024-05-05MySQL使用distinct去掉查詢結(jié)果重復(fù)的問題
這篇文章主要介紹了MySQL使用distinct去掉查詢結(jié)果重復(fù)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01mysql 實(shí)現(xiàn)設(shè)置多個(gè)主鍵的操作
這篇文章主要介紹了mysql 實(shí)現(xiàn)設(shè)置多個(gè)主鍵的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-02-02MySQL錯(cuò)誤代碼1862 your password has expired的解決方法
這篇文章主要為大家詳細(xì)介紹了MySQL錯(cuò)誤代碼1862 your password has expired的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-08-08linux下mysql5.7.17最新穩(wěn)定版本安裝教程
這篇文章主要為大家詳細(xì)介紹了linux上mysql5.7.17最新穩(wěn)定版本安裝教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02