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

Posted

技术标签:

【中文标题】获取每组中元素之间的最小差异【英文标题】:Get minimum diff between elements in each group 【发布时间】:2014-01-28 18:55:51 【问题描述】:

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

时间戳(unix 时间戳) 一些值列 [...] groupid

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

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

任何帮助将不胜感激!

【问题讨论】:

所有元素之间的区别是什么意思? 【参考方案1】:

一种方法是自加入和group by

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;

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

【讨论】:

以上是关于获取每组中元素之间的最小差异的主要内容,如果未能解决你的问题,请参考以下文章

具有共同 id 的组中具有最大天数的两个日期之间的差异

mysql中的函数

获取 Postgres 中每个值与整体最小值的差异

postgre 获取分组中的一条数据,最大值或最小值等

postgre 获取分组中的一条数据,最大值或最小值等

获取字符串向量元素之间的最小共享部分