繁体   English   中英

使用滞后访问mysql中的前一行值

[英]Using lag to access previous row value in mysql

我有一个日期时间列,即fromDatetoDate

我想弄清楚间隔是否连续。

这是我的表的样子:

在此处输入图片说明

我想以 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 中的表达式。 这是较短的,应该工作得很好:

sum(1 - fromdate <=> lag_todate) over(order by fromdate) grp

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM