我的数据库中有一个表,其中包含 ID 和 DATETIME 列,以下是一些示例数据:
ID | DATETIME
1 | 2014-05-06 01:12
1 | 2014-05-06 01:30
1 | 2014-05-06 01:45
1 | 2014-05-06 02:59
2 | 2014-05-06 01:17
2 | 2014-05-06 01:18
2 | 2014-05-06 01:19
2 | 2014-05-06 02:00
我需要生成一个查询来确定属于 DATETIME
值之间时间最长的对象的 ID,其中连续 DATETIME
值之间的时间不相等超过20分钟。
例如,在示例数据中,我希望返回 1,因为它具有来自 (01:12 - 01:45)
的 DATETIME
值,而没有连续的DATETIME
值之间相差 20 分钟。
谢谢。
最佳答案
看来您需要自加入。因为如果您有 10 个 ID 条目,则 20 分钟的间隙可能介于条目 3-6 与 1-4 甚至 4-9 之间。因此,连接的第二个实例将位于相同的 ID 上,并且日期时间高于主条目的日期时间,但少于 20 分钟。然后,可以根据时间间隔和限制来订购您想要的那份。像这样的东西:
select
YT.ID,
YT.DTColumn,
MAX( YT2.DTColumn ) as MaxDateWithin20Minutes
from
YourTable YT
JOIN YourTable YT2
ON YT.ID = YT2.ID
AND YT.DTColumn < YT2.DTColumn
AND YT2.DTColumn <= date_add( YT.DTColumn, INTERVAL 20 MINUTE )
group by
YT.ID,
YT.DTColumn
order by
timediff(MAX( YT2.DTColumn ), YT.DTColumn) DESC
limit
1
关于mySQL - 根据连续差异对值进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26257075/