查询以根据来自多行的数据连接行

Query to concatenate rows based on data from multiple rows

我正在尝试使用 SQL Server 2014 中的查询打印出 xml 结果。

查询假定 return 日期范围内的数据,以及 return 球员姓名和球员时间的串联列表。

仅当 playEnd 与下一位玩家 playStart 相距 30 分钟以内时才会发生串联。

所以如果我有这样的数据:

Name        PlayDate         PlayStart      PlayEnd
----------------------------------------------------
player1 |   10/8/2018    |   08:00:00   |   09:00:00
player2 |   10/8/2018    |   09:10:00   |   10:10:00
player3 |   10/9/2018    |   10:40:00   |   11:30:00
player4 |   10/11/2018   |   08:30:00   |   08:37:00
player5 |   10/11/2018   |   08:40:00   |   08:50:00  
player6 |   10/12/2018   |   09:00:00   |   09:45:00
player7 |   10/12/2018   |   09:50:00   |   10:10:00
player8 |   10/12/2018   |   10:30:00   |   12:20:00

我已经尝试以多种方式修改下面的查询,但我只是不知道如何将一行数据与下一行数据进行比较,然后在需要时将两行(或更多行)组合起来。

select Name, PlayDate, PlayStart, PlayEnd
where playDate between '10/8/2018' and '10/12/2018'
for xml auto

有没有办法用 SQL Server 2014 做到这一点?

谢谢!

假设游戏不在午夜前后进行,您可以使用 lag() 和累积总和来计算:

select t.*,
       sum(case when prev_playEnd is null or prev_playEnd < dateadd(-30, minute, playEnd)
                then 1 else 0
           end) over (partition by playdate order by playStart
                     ) as grouping
from (select t.*,
             lag(playEnd) over (partition by playdate order by playStart) as prev_playEnd
      from t
     ) t;

列分组有你想要的信息。