mysql中,筛选出今天“相邻两条数据差值5分钟”以上的数据,表数据量比较大,应该怎么写这个sql?

作者站长头像
站长
· 阅读数 15

因为数据库版本为5.7,所以不支持lag()开窗函数mysql中,筛选出今天“相邻两条数据差值5分钟”以上的数据,表数据量比较大,应该怎么写这个sql?

回复
1个回答
avatar
test
2024-07-10
set @tmp = '2000-1-1'; select * from (select *, TIMESTAMPDIFF(SECOND, @tmp, time) as diff,  @tmp := time  from 表名 ) as t1 where diff > 300;

试试这行么? 用临时变量 @tmp 保存上一条记录的time, 然后和本条记录做秒差

另外如果可以生成新表的话, 那建个 auto increment 的主键字段, 然后用连表条件select * from 表 as a left join 表 as b on a.主键 = b.主键+1 where TIMESTAMPDIFF(SECOND, a.time, b.time) > 300 差行连表, 再计算

还有个技巧, 不知道性能如何, 应该可以用, 把select字段选少一些就行.

set @i = 0; set @j = 0; select *, a2 - a1 from ( select *, @i := @i + 1 as a1 from lag1 ) as t1 left join (  select *, @j := @j + 1 as a2 from lag1 ) as t2 on t1.a1 + 1 = t2.a2 ;
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容