如何选择每个时间间隔的最大时间戳和最小时间戳

时间:2018-06-03 14:08:00

标签: mysql sql postgresql

enter image description here

我将使用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

1 个答案:

答案 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不支持窗口函数,因此计算更加艰巨。