获取每组中元素之间的最小差异
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;
这使用了以下观察:当时间戳被排序时,两个相邻行之间将出现最小差异。
【讨论】:
以上是关于获取每组中元素之间的最小差异的主要内容,如果未能解决你的问题,请参考以下文章