如果行之间的差异超过 1 分钟,如何对数据进行分组
Posted
技术标签:
【中文标题】如果行之间的差异超过 1 分钟,如何对数据进行分组【英文标题】:How to group data if difference between rows is mothe than 1 minute 【发布时间】:2020-09-17 22:33:12 【问题描述】:我正在尝试在 SQL 上创建一个包含汇总数据的新表。
例如。在原始表中,我有以下数据:
如果您看到第 9、10 和 11 行它们是连续的,所以我想将它们分组在一行中
Begin: 2020-07-02 20:11:00.000
End: 2020-07-02 20:13:00.000
忽略第 12 行和第 13 行。我给它们着色时出错了
【问题讨论】:
【参考方案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
【讨论】:
以上是关于如果行之间的差异超过 1 分钟,如何对数据进行分组的主要内容,如果未能解决你的问题,请参考以下文章