按开始和结束日期对数据进行分组

问题描述

我有两个孩子的数据集,他们将根据他们的位置见面。

enter image description here

这是我想要获得的输出

enter image description here

我正在尝试使用 RowNumber 在 (sql Server 2016) 中编写一个 sql 查询,为每个彩色方案放置一个唯一的组号,以便我可以在下一个查询中使用 group by 来获取开始和结束日期,但它不起作用

Select disTINCT [Date],[Visitee Id],[Visitor Id],Group,ROW_NUMBER() OVER (PARTITION BY [Visitee Id],Group ORDER BY [Visitee Id],[date],Group) AS GroupNumber

    FROM Table1

解决方法

这是一种间隙和孤岛问题。如果您只对连续几天感兴趣,您可以使用 row_number() 和聚合处理:

select visiteeid,visitorid,group,min(date),max(date)
from (select t.*,row_number() over (partition by visiteeid,group order by date) as seqnum
      from t
     ) t
group by visiteeid,dateadd(day,- seqnum,date);

这个想法是,当日期在每一行上增加 1 时,从日期中减去一个序列是恒定的。剩下的就是聚合。