【问题标题】:How to group data if difference between rows is mothe than 1 minute如果行之间的差异超过 1 分钟,如何对数据进行分组
【发布时间】:2023-03-12 07:41:01
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: sql ssms window-functions gaps-and-islands


    【解决方案1】:

    这是一个孤岛问题。您想对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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多