Mysql: Find rows, where timestamp difference is less than x

前端 未结 3 1815
佛祖请我去吃肉
佛祖请我去吃肉 2021-01-24 07:35

I\'ve got table structure as follows:

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


        
相关标签:
3条回答
  • 2021-01-24 07:54

    DATEDIFF(t.netxdata, t.date) < (1300 / 3600 / 24) I assumed 1300 in in seconds, so I converted it to days which is what DATEDIFF returns. Please, be aware that this query will do a full scan of your table, which might be expensive.

    0 讨论(0)
  • 2021-01-24 08:05

    This seems to be one of those rare cases where using a CURSOR is truly the most appropriate, and performant option.

    However, if performance is not a consideration, you could do a correlated subquery, like the following

    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
    

    This will run very slowly on large data sets.

    0 讨论(0)
  • 2021-01-24 08:13

    try this :-

    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;
    

    see DEMO

    0 讨论(0)
提交回复
热议问题