繁体   English   中英

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

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

我试图在 SQL 上创建一个包含汇总数据的新表。

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

我的数据的图像

如果您看到第 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

暂无
暂无

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

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