问题描述
我有两个孩子的数据集,他们将根据他们的位置见面。
这是我想要获得的输出
我正在尝试使用 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 时,从日期中减去一个序列是恒定的。剩下的就是聚合。