MYSQL LAG()與LEAD()的區(qū)別
這兩個(gè)函數(shù)是偏移量函數(shù),可以查出一個(gè)字段的前面N個(gè)值或者后面N個(gè)值,配合over來(lái)使用。
下面舉例說(shuō)明,新建表格如下:
drop table if exists exam_record; CREATE TABLE exam_record ( id int PRIMARY KEY AUTO_INCREMENT COMMENT '自增ID', uid int NOT NULL COMMENT '用戶ID', exam_id int NOT NULL COMMENT '試卷ID', start_time datetime NOT NULL COMMENT '開(kāi)始時(shí)間', submit_time datetime COMMENT '提交時(shí)間', score tinyint COMMENT '得分' )CHARACTER SET utf8 COLLATE utf8_general_ci; INSERT INTO exam_record(uid,exam_id,start_time,submit_time,score) VALUES (1001, 9001, '2020-01-01 09:01:01', '2020-01-01 09:21:59', 90), (1002, 9001, '2020-01-20 10:01:01', '2020-01-20 10:10:01', 89), (1002, 9001, '2020-02-01 12:11:01', '2020-02-01 12:31:01', 83), (1003, 9001, '2020-03-01 19:01:01', '2020-03-01 19:30:01', 75), (1004, 9001, '2020-03-01 12:01:01', '2020-03-01 12:11:01', 60), (1003, 9001, '2020-03-01 12:01:01', '2020-03-01 12:41:01', 90), (1002, 9001, '2020-05-02 19:01:01', '2020-05-02 19:32:00', 90), (1001, 9002, '2020-01-02 19:01:01', '2020-01-02 19:59:01', 69), (1004, 9002, '2020-02-02 12:01:01', '2020-02-02 12:20:01', 99), (1003, 9002, '2020-02-02 12:01:01', '2020-02-02 12:31:01', 68), (1001, 9002, '2020-02-02 12:01:01', '2020-02-02 12:43:01', 81), (1001, 9002, '2020-03-02 12:11:01', null, null);
1.lag()
語(yǔ)法:lag(expr,N,default)
- expr:它可以是列或任何內(nèi)置函數(shù)。
- N:它是一個(gè)正值,它確定當(dāng)前行之前的行數(shù)。如果在查詢中將其省略,則其默認(rèn)值為1
- default:如果在當(dāng)前行之前沒(méi)有行N行的情況下,它是函數(shù)返回的默認(rèn)值。如果缺少,則默認(rèn)為NULL。
select *,lag(start_time,1) over(order by id)lad_1, lag(uid,2) over(order by id)lad_2 from exam_record
可以看到所有的start_time都等于前面一個(gè)的start_time,前面沒(méi)有的填充NULL,設(shè)置lag()里面的參數(shù)為2,可以看到所有的uid偏移了兩個(gè)。
select *,lag(start_time,2,0) over(partition by uid order by id)lag_1 from exam_record
根據(jù)uid分組對(duì)start_time向前移動(dòng)2個(gè)單元,然后設(shè)置NULL值默認(rèn)填充為0. 可以自己體會(huì)一下數(shù)據(jù)的移動(dòng)方式。
2.lead()
語(yǔ)法:lead(expr,N,default)
- expr:它可以是列或任何內(nèi)置函數(shù)。
- N:它是一個(gè)正值,它確定當(dāng)前行之后的行數(shù)。如果在查詢中將其省略,則其默認(rèn)值為1
- default:如果在當(dāng)前行之后沒(méi)有行N行的情況下,它是函數(shù)返回的默認(rèn)值。如果缺少,則默認(rèn)為NULL。
select *,lead(start_time,1) over(order by id)lead_1, lead(uid,2) over(order by id)lead_2 from exam_record
可以看到所有的start_time都等于后面一個(gè)的start_time,后面沒(méi)有的填充NULL,設(shè)置lead()里面的參數(shù)為2,可以看到所有的uid都等于后面第二個(gè)的uid。
select *,lead(start_time,1) over(partition by uid order by id)lead_1 from exam_record
還可以根據(jù)uid進(jìn)行分組,然后再進(jìn)行偏移。
到此這篇關(guān)于MYSQL LAG()與LEAD()的區(qū)別的文章就介紹到這了,更多相關(guān)MYSQL LAG() LEAD()內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
原來(lái)MySQL?數(shù)據(jù)類型也可以優(yōu)化
這篇文章主要介紹了原來(lái)MySQL?數(shù)據(jù)類型也可以優(yōu)化,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助2022-08-08對(duì)MySQL慢查詢?nèi)罩具M(jìn)行分析的基本教程
這篇文章主要介紹了對(duì)MySQL慢查詢?nèi)罩具M(jìn)行分析的基本教程,文中提到的Query-Digest-UI這個(gè)基于B/S的圖形化查看工具非常好用,需要的朋友可以參考下2015-12-12PHP學(xué)習(xí)散記 2012_01_07(MySQL)
數(shù)據(jù)庫(kù)是Web大多數(shù)應(yīng)用開(kāi)發(fā)的基礎(chǔ)。如果你是用PHP,那么大多數(shù)據(jù)庫(kù)用的是MYSQL也是LAMP架構(gòu)的重要部分2012-01-01MySQL執(zhí)行update語(yǔ)句和原數(shù)據(jù)相同會(huì)再次執(zhí)行嗎
這篇文章主要給大家介紹了關(guān)于MySQL執(zhí)行update語(yǔ)句和原數(shù)據(jù)相同是否會(huì)再次執(zhí)行的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04Docker啟動(dòng)mysql配置實(shí)現(xiàn)過(guò)程
這篇文章主要介紹了Docker啟動(dòng)mysql配置實(shí)現(xiàn)過(guò)程,文中附含詳細(xì)的圖文示例,有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家早日升職加薪2021-09-09mysql 連接出現(xiàn)Public Key Retrieval is n
在MySQL連接中出現(xiàn)“Public Key Retrieval is not allowed”錯(cuò)誤,通常是因?yàn)樵谑褂冒踩捉幼謱樱⊿SL)連接時(shí)遇到了問(wèn)題,本文就來(lái)介紹一下解決方法,感興趣的可以了解一下2024-03-03