mysql - 获取每组中元素之间的最小差异

标签 mysql sql

我有一个如下形式的 mysql 表:

  • 时间戳(unix 时间戳)
  • 一些值列[...]
  • 组ID

现在我想构建一个查询,该查询按 groupid 分组并打印组中每个时间戳之间的最小时间差。

类似于 SELECT groupid, MIN(??? - ???) asminimum_time_diff FROM mytable GROUP BY groupid;

如有任何帮助,我们将不胜感激!

最佳答案

一种方法是使用自连接和分组依据:

select t1.groupid, min(timestampdiff(second, t1.timestamp, t2.timestamp)) as minsecs
from table t1 join
     table t2
     on t1.groupid = t2.groupid and t1.timestamp < t2.timestamp
group by t1.groupid;

您还可以使用变量来执行此操作:

select groupid, min(timestampdiff(second, prevtimestamp, timestamp))
from (select t.*,
             if(@groupid = groupid, @prevtimestamp, NULL) as prevtimestamp,
             @prevtimestamp := timestamp,
             @groupid = groupid
      from table t cross join
           (select @prevtimestamp := 0, @groupid = '')
      order by groupid, timestamp
     ) t
group by groupid;

这使用了这样的观察:当时间戳排序时,两个相邻行之间将出现最小差异。

关于mysql - 获取每组中元素之间的最小差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21414366/

相关文章:

java - Class.forName (“com.mysql.jdbc.Driver” ) 在 Raspberry Pi 上不起作用

mysql - 统计表中出现的次数 (MySQL)

mysql - SQL 查询在特定日期不起作用

php - 在 MySQL 中将 2 个更新查询作为一个运行

mysql - 计算嵌套的 mysql 查询

mysql - 组合两个具有不同行数的选择和一个分组依据

mysql - SQL GROUP BY 选择具有最高日期的行

sql - 使用 dplyr::left_join (R lang) 与 SQL LEFT JOIN 处理 NA/NULL 的差异

sql - 转换时转义 XML 特殊字符

mysql - 如何为 5/24 - 27/41 的日期创建此列? MySQL