MySQL:查找连续的行,其中时间戳差小于x

时间:2013-07-05 12:56:23

标签: mysql

  

重复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。可能吗?

1 个答案:

答案 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不支持窗口函数。