重复Mysql: Find rows, where timestamp difference is less than x
我的表格如下:
Field Type
id int(11)
user varchar(64)
date int(11)
key int(11)
日期采用时间戳格式。 我正在寻找一种方法,找到所有行,其中连续行之间的时间戳差异小于x。可能吗?
答案 0 :(得分:3)
这是可能的,假设时间戳表示date
。这是一个使用相关子查询来获取下一个date
值的版本:
select t.*
from (select t.*,
(select date
from yourtable t2
where t2.date > t.date
order by t2.date
limit 1
) as NextDate
from yourtable t
) t
where <difference calculation goes here>;
编辑:
以上是标准SQL。在MySQL中,您也可以使用变量执行此操作。
select t.*
from (select t.*, @nextdate as nextdate, @nextdate := date
from yourtable t
order by date desc
) t
where <difference calculation goes here>;
我对这种方法有两个问题。首先,变量的使用需要对结果集进行顺序处理(在MySQL中没什么大不了的,因为我认为无论如何都会发生这种情况)。更重要的是,select
的评估顺序无法保证。换句话说,这可能有效,但不能保证有效。
顺便说一下,许多其他数据库都支持lead()
函数,这是执行此操作的“正确”方法。不幸的是,MySQL不支持窗口函数。