簡體   English   中英

Mysql:查找時間戳差小於x的行

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

我的表結構如下:

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;

但它似乎沒有用。 任何人都可以幫我解決我的任務嗎?

DATEDIFF(t.netxdata,t.date)<(1300/3600 / 24)我在幾秒鍾內假設1300英寸,所以我將它轉換為DATEDIFF返回的天數。 請注意,此查詢將對您的表進行全面掃描,這可能很昂貴。

嘗試這個 :-

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

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

這將在大型數據集上運行得非常慢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM