如果行之间的差异超过1分钟,如何分组数据

问题描述

我正在尝试在sql上创建一个新表,该表将汇总数据。

例如。在原始表中,我有以下数据:

Image of my data

如果您看到第9、10和11行,它们是连续的,那么我想将它们分组为一行

Begin: 2020-07-02 20:11:00.000
End:   2020-07-02 20:13:00.000

忽略第12和13行。我在给它们上色时出错了

解决方法

这是一个空白问题。您想对begin_date之间的间隔小于1分钟的连续行进行分组。

在这里,我建议您lag()和一个累加的总和来定义组,然后进行聚合:

select id,min(begin_date) begin_date,max(begin_date) end_date
from (
    select t.*,sum(case when begin_date <= dateadd(minute,1,lag_begin_date) then 0 else 1 end) 
            over(partition by id order by begin_date) grp
    from (
        select t.*,lag(begin_date) over(partition by id order by begin_date) lag_begin_date
        from mytable t
    ) t
) t
group by id,grp