MYSQL LAG()與LEAD()的區(qū)別
這兩個(gè)函數(shù)是偏移量函數(shù),可以查出一個(gè)字段的前面N個(gè)值或者后面N個(gè)值,配合over來(lái)使用。
下面舉例說明,新建表格如下:
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 '開始時(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)前行之前沒有行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,前面沒有的填充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)前行之后沒有行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,后面沒有的填充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)文章
將圖片儲(chǔ)存在MySQL數(shù)據(jù)庫(kù)中的幾種方法
今天小編就為大家分享一篇關(guān)于將圖片儲(chǔ)存在MySQL數(shù)據(jù)庫(kù)中的幾種方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03
連接MySQL出現(xiàn)Host is not allowed to con
這篇文章主要給大家介紹了連接MySQL出現(xiàn)Host is not allowed to connect to this MySQL server 解決方法,文中有詳細(xì)的解決步驟,需要的朋友可以參考下2023-08-08
mysql5.7及mysql 8.0版本修改root密碼的方法小結(jié)
這篇文章主要介紹了mysql5.7及mysql 8.0版本修改root密碼方式 ,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-11-11

