简体   繁体   English

在mysql ..中,如何获取时差大于1小时的上下数据?

[英]How to get upper and lower data where time difference is more than 1 hour in mysql..?

I have a table having per hour table records like this : 我有一张每小时都有这样的表记录的表:

在此处输入图片说明

As you can see every record have 1 hour difference but the highlighted one has more than one hour. 如您所见,每条记录相差1小时,但突出显示的记录相差一小时以上。 I need a query which should return me both values upper ( id 11379728 ) and lower ( id 11378448 ) where gap is more than 1 hour. 我需要一个查询,该查询应同时返回间隙大于1小时的上id 11379728id 11379728 )和下id 11378448id 11378448 )。

Any help will be appreciated. 任何帮助将不胜感激。

Note :- please ignore last datetime column as it serves different purpose. 注意:-请忽略最后一个datetime列,因为它具有不同的用途。

I got a working solution (perfect in my case) : 我有一个有效的解决方案(对我而言是完美的):

SET @lastDate := (SELECT dateColumn FROM table ORDER BY dateColumn ASC LIMIT 1);

SELECT @lastDate as lastDate, HOUR(TIMEDIFF(dateColumn, @lastDate)) as diff, @lastDate := dateColumn, dateColumn
FROM table 
group by dateColumn 
having diff > 1
order by dateColumn ASC;

In some cases mysql 5.5 and 5.6 will give different results for HAVING clause. 在某些情况下,mysql 5.5和5.6会为HAVING子句提供不同的结果。 Above query will run good on mysql 5.5. 上面的查询将在mysql 5.5上运行良好。 I have created another version to run on both version similarly like this : 我创建了另一个版本,可以在两个版本上类似运行:

SET @lastDate := (SELECT dateColumn FROM table ORDER BY dateColumn ASC LIMIT 1);

SELECT * FROM (SELECT @lastDate as lastDate, HOUR(TIMEDIFF(dateColumn, @lastDate)) AS diff, @lastDate := dateColumn, dateColumn FROM table GROUP BY dateColumn ORDER BY dateColumn ASC) AS tbl  WHERE tbl.diff > 1;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM