[英]Using lag to access previous row value in mysql
这是一个间隙和孤岛问题,您希望将“相邻”行组合在一起。
下面是一个选项使用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 中的表达式。 这是较短的,应该工作得很好:
sum(1 - fromdate <=> lag_todate) over(order by fromdate) grp
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.