mySQL - 根据连续差异对值进行分组

标签 mysql sql datetime

我的数据库中有一个表,其中包含 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/

相关文章:

sql - DW 上下文中的 Grain 是什么

mysql - SQLSTATE[42000] 语法错误或访问冲突 行大小太大

php - 在数据库中存储当前日期时间的最佳属性

date - 忽略超越比较文件比较中的日期列

mysql - 切片类型后循环

php - 使用 PHP 将 mysql 表导出到 CSV - header 问题

sql - HTML5 Web 数据库安全

php - 为处理可变数量的质量规范的 mySQL/PHP 应用程序构建数据结构的正确方法

php - SQLSTATE[HY000] [2005] 未知的 MySQL 服务器主机 'mysql1.alwaysdata.com:3306' (2)

excel - 导出到excel时将类 'pandas.tslib.Timedelta'转换为字符串