mysql使用变量实现lag,lead

最近有一个计算断线时长的需求,mysql5.7使用变量实现lag前一行和lead后一行的效果:

create table test_t(
id int,
log_time datetime
)

INSERT INTO `test_t` (`id`, `log_time`) VALUES ('1', '2022-06-09 14:00:00');
INSERT INTO `test_t` (`id`, `log_time`) VALUES ('2', '2022-06-09 14:05:00');
INSERT INTO `test_t` (`id`, `log_time`) VALUES ('3', '2022-06-09 14:10:00');
INSERT INTO `test_t` (`id`, `log_time`) VALUES ('4', '2022-06-09 14:15:00');
INSERT INTO `test_t` (`id`, `log_time`) VALUES ('5', '2022-06-09 15:05:00');
INSERT INTO `test_t` (`id`, `log_time`) VALUES ('6', '2022-06-09 15:10:00');
select a.*,
@lt as last_time,
@lt:=a.log_time as this_time
 from 
test_t a,(select @lt:='2022-01-01 00:00:00') tmp  order by a.log_time asc

-- 设置一个变量@lt,默认为当年的1月1日0点,然后取出来当作上一次的登陆时间,之后再将它设置为这次的登陆时间,那么mysql再计算下一行的时候会把这个值带过去,当成上一次登陆时间。

mysql使用变量实现lag,lead_第1张图片

然后再做差值对比,大于5分钟的则为断线,两个时间点为断线和重启时间。 

你可能感兴趣的:(Mysql,mysql,数据库)