首页 > 解决方案 > 按开始和结束日期分组数据

问题描述

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

在此处输入图像描述

这是我想要得到的期望输出

在此处输入图像描述

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

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

    FROM Table1

标签: sqlgroup-bysql-server-2016row-number

解决方案


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

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

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


推荐阅读