MySQL窗口函数LAG与LEAD详解:数据向前向后偏移对比
LAG()和LEAD()是MySQL强大的窗口函数,用于访问当前行之前或之后的指定行数数据。本文将通过具体SQL示例,详解这两个函数的语法结构、参数配置以及在实际数据分片中的不同表现。
结果与功能概述
L AG() 与 LEAD() 统称为偏移量窗口函数,主要解决单表内行间数据的横向比较问题。它们允许在不使用自连接(Self-Join)的情况下,直接获取某列向上或向下移动 N 位后的值。这在计算同比/环比增长率、识别数据断点或分析用户连续行为时非常关键。
准备环境
为了演示这两个函数的运行逻辑,需要构建一张包含多个用户多次考试记录的数据表。以下脚本定义了表结构并插入了具有不同用户ID(uid)和时间戳(start_time)的测试数据。
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 '开始时间',
submit_time datetime COMMENT '提交时间',
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);免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









