Mysql:查找时间戳差小于x的行

时间:2013-07-07 16:31:51

标签: mysql sql

我的表格结构如下:

Field       Type
id              int(11)      AI
user            varchar(64)
date            timestamp
key             int(11)

我需要做的是找到行(从给定日期开始),其中两个连续行之间的差异(最接近的时间戳(对于给定用户)小于1300.

我被告知要使用这样的查询:

select t.*
from (select t.*, @nextdate as nextdate, @nextdate := date
      from my_table t
      order by date desc
     ) t
where t.nextdate - t.date < 1300;

但它似乎没有用。任何人都可以帮我解决我的任务吗?

3 个答案:

答案 0 :(得分:1)

DATEDIFF(t.netxdata,t.date)&lt; (1300/3600/24) 我在几秒钟内假设1300英寸,所以我将它转换为DATEDIFF返回的天数。 请注意,此查询将对您的表进行全面扫描,这可能很昂贵。

答案 1 :(得分:1)

试试这个: -

select t1.user, t1.date d1,t2.date d2 ,t1.date-t2.date
  from  (select @val:=@val+1 rowid,user,  date
           from mytable,(select @val:=0) a
       order by user,date) t1,

        (select @val1:=@val1+1 rowid,user,  date
           from mytable,(select @val1:=1) b
       order by user,date) t2

 where t1.rowid = t2.rowid
   and t1.user = t2.user
   and t1.date-t2.date < 1300;

请参阅DEMO

答案 2 :(得分:1)

这似乎是少数几种使用CURSOR确实是最合适且性能最佳的选择之一。

但是,如果不考虑性能,则可以执行相关子查询,如下所示

SELECT *, second_time - first_time
   FROM
   (
      SELECT T.user, 
             T.date      AS first_time, 
             (SELECT MIN(S.date) 
                FROM My_Table S 
                WHERE S.user = T.user
                  AND S.date > T.date
             )                         AS second_time
        FROM My_Table T
   ) G
   WHERE (second_time - first_time) < 1300

这对大型数据集的运行速度非常慢。