如果行之间的差异超过 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
我正在尝试在 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