1个回答

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 ;
回复

适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容