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

How to group data if difference between rows is mothe than 1 minute

我正在尝试在 SQL 上创建一个新的 table,它将汇总数据。

例如。在原始 table 我有这个数据:

如果您看到第 9、10 和 11 行,它们是连续的,所以我想将它们分组在一行中

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

忽略第 12 行和第 13 行。我在给它们上色时犯了一个错误

这是一个 gaps-and-islands 问题。您想要对 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