问题描述
我正在尝试确定间隔是否连续。
这是我的桌子的样子:
我希望以3个间隔获得以下结果:
fromDate | toDate
2020-05-23 08:00:00 | 2020-05-23 09:15:00
2020-05-23 11:00:00 | 2020-05-23 12:00:00
2020-05-23 15:00:00 | 2020-05-23 15:30:00
有什么想法吗?
解决方法
这是一个空白问题,您希望将“相邻”行分组在一起。
这里是一个使用lag()
来恢复上一行上的todate
,然后是窗口sum()
来标识孤岛的选项。最后一步是汇总每个岛屿:
select min(fromdate) fromdate,max(todate) todate
from (
select t.*,sum(case when fromdate = lag_todate then 0 else 1 end) over(order by fromdate) grp
from (
select t.*,lag(todate) over(order by fromdate) lag_todate
from mytable t
) t
) t
group by grp
注意:由于您正在运行MySQL,我们可以稍微简化窗口和中的表达式。这更短了,应该可以正常工作:
sum(1 - fromdate <=> lag_todate) over(order by fromdate) grp