[英]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.