我将使用mysql或postgresql。
是否可以通过section2选择每个间隔的最大和最小时间戳?
前:
red block:2018-05-27 15:11:49~2018-05-27 15:11:54
green block:2018-05-27 15:11:55~2018-05-27 15:12:12
yellow block:2018-05-27 15:12:13~2018-05-27 15:12:16
答案 0 :(得分:2)
这是一个空白和岛屿问题。我强烈建议Postgres。使用行数的差异很容易解决:
select section1, section2, min(datetime), max(datetime)
from (select t.*,
row_number() over (partition by section1 order by datetime) as seqnum_1,
row_number() over (partition by section1, section2 order by datetime) as seqnum_12
from t
) t
group by (seqnum_1 - seqnum_12);
行号的区别标识了您感兴趣的部分。原因有点难以解释,但是如果您运行子查询,您可以看到正在发生的事情 - 每个感兴趣的部分的差异是不变的。
相同的代码将在MySQL 8.0中运行。但是,早期版本的MySQL不支持窗口函数,因此计算更加艰巨。