我正在尝试使用SQL Server 2014中的查询打印出xml结果。
假定该查询返回日期范围内的数据,并返回播放器名称和播放器时间的串联列表。
仅当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是否可以做到这一点?
谢谢!
答案 0 :(得分:1)
假设游戏不是在午夜左右进行,您可以使用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;
列分组中包含您想要的信息。