1

我的表结构如下:

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;

但它似乎没有用。谁能帮我解决我的任务?

4

3 回答 3

1

DATEDIFF(t.netxdata, t.date) < (1300 / 3600 / 24) 我假设 1300 以秒为单位,所以我将其转换为 DATEDIFF 返回的天数。请注意,此查询将对您的表进行全面扫描,这可能会很昂贵。

于 2013-07-07T16:50:04.157 回答
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

这将在大型数据集上运行非常缓慢。

于 2013-07-07T17:15:02.150 回答
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;

演示

于 2013-07-07T17:01:17.170 回答