mysql复制 lag很大,mysql 实现lag() over (partition by order by)

初始化sql数据

CREATE TABLE `t_student` (

`id` bigint NOT NULL,

`name` varchar(100) COLLATE utf8mb4_general_ci DEFAULT NULL,

`score` int DEFAULT NULL,

`class_id` int DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

INSERT INTO `t_student` VALUES (1, 'A', 75, 1);

INSERT INTO `t_student` VALUES (2, 'B', 78, 2);

INSERT INTO `t_student` VALUES (3, 'C', 74, 1);

INSERT INTO `t_student` VALUES (4, 'D', 85, 2);

INSERT INTO `t_student` VALUES (5, 'E', 80, 1);

INSERT INTO `t_student` VALUES (6, 'F', 82, 2);

INSERT INTO `t_student` VALUES (7, 'G', 98, 1);

INSERT INTO `t_student` VALUES (8, 'H', 90, 2);

INSERT INTO `t_student` VALUES (9, 'I', 90, 2);

mysql 8版本的开窗函数实现效果

select id,name,class_id,score,lag(score,1,0)

over (partition by class_id order by score desc) before_score from t_student;

35b1f7d003c0

image.png

mysql 8版本前实现

SELECT

c.id,

c.NAME,

c.class_id,

c.score,

c.before_score

FROM

(

SELECT

IF ( @id = a.class_id, @lagname := @score, @lagname := '' ) AS before_score,

@id := a.class_id AS aclass_id,

@score := a.score AS aafter_score,

a.*

FROM

( SELECT * FROM t_student ORDER BY class_id, score DESC ) a,

( SELECT @lagname := NULL, @id := 0, @score := NULL ) b

) c;

35b1f7d003c0

image.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值