我的表格结构如下:
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;
但它似乎没有用。任何人都可以帮我解决我的任务吗?
答案 0 :(得分:1)
DATEDIFF(t.netxdata,t.date)&lt; (1300/3600/24) 我在几秒钟内假设1300英寸,所以我将它转换为DATEDIFF返回的天数。 请注意,此查询将对您的表进行全面扫描,这可能很昂贵。
答案 1 :(得分: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 :(得分: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
这对大型数据集的运行速度非常慢。