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再计算下一行的时候会把这个值带过去,当成上一次登陆时间。

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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值