【问题标题】:Mysql: Find rows, where timestamp difference is less than xMysql:查找时间戳差异小于x的行
【发布时间】:2013-07-07 16:31:50
【问题描述】:

我的表结构如下:

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;

但它似乎不起作用。谁能帮我解决我的任务?

【问题讨论】:

标签: mysql sql


【解决方案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】:

    DATEDIFF(t.netxdata, t.date)

    【讨论】:

    • 嗯...在 Phpmyadmin 我有信息,该查询是成功的,但我没有看到任何回报。没有任何信息返回了多少行。
    【解决方案3】:

    这似乎是使用 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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-30
      • 2012-06-03
      • 2012-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多