2016-03-09 100 views
3

我正在寻找一个select语句或某些可以将多个行组合在一起的情况下,当同一个房间的两个日期之间只有一天时间,结束日期为每个房间的这段时间。MS SQL将日期行组合到起始结束日期

当上一行之间只有一天时,它应该将所有行相同的RoomID组合起来,而是计算Start DateEnd Date

我已经尝试过与群组,但一直没有可能创造任何接近输出。

表它自身包含超过万条记录,并且代码需要的所有行2个日期之间的结合,在这种情况下它是从2016年8月1日至2016年9月3日

我希望有人是能够帮助我解决这个问题,谢谢。

我的数据是这样的,始终RoomID进行排序,然后Date

 
ID   RoomID  Date 
60307  1164  01-08-2016 00:00 
60308  1164  02-08-2016 00:00 
60309  1164  03-08-2016 00:00 
60310  1164  04-08-2016 00:00 
60312  1164  06-08-2016 00:00 
60313  1164  07-08-2016 00:00 
60314  1165  01-08-2016 00:00 
60315  1165  02-08-2016 00:00 
60316  1165  03-08-2016 00:00 
60317  1165  04-08-2016 00:00 
60318  1165  05-08-2016 00:00 
60319  1165  06-08-2016 00:00 
60320  1165  07-08-2016 00:00 
60383  1164  10-08-2016 00:00 
60384  1164  11-08-2016 00:00 
60385  1164  12-08-2016 00:00 
60386  1165  10-08-2016 00:00 
60387  1165  11-08-2016 00:00 
60388  1165  12-08-2016 00:00 
60395  1164  01-09-2016 00:00 
60396  1164  02-09-2016 00:00 
60397  1164  03-09-2016 00:00 
60398  1164  04-09-2016 00:00 
60399  1164  05-09-2016 00:00 
60400  1165  01-09-2016 00:00 
60401  1165  02-09-2016 00:00 
60402  1165  03-09-2016 00:00 

并结合应该是这样的:

 
RoomID  Startdate  EndDate 
1164  01-08-2016 00:00  04-08-2016 00:00 
1164  06-08-2016 00:00  07-08-2016 00:00 
1165  01-08-2016 00:00  07-08-2016 00:00 
1164  10-08-2016 00:00  12-08-2016 00:00 
1165  10-08-2016 00:00  12-08-2016 00:00 
1164  01-09-2016 00:00  05-09-2016 00:00 
1165  01-09-2016 00:00  03-09-2016 00:00 
+1

你在这里试图做的是每个房间的连续日期的群岛。看看这篇文章是一个很好的开始。 http://www.sqlservercentral.com/articles/T-SQL/71550/ –

+0

这被称为“间隙和孤岛”问题。如果你谷歌这个词,你会发现很多解决方案。 –

回答

2

你可以尝试类似如下:

select 
    RoomID, 
    MIN([Date]) as StartDate, 
    MAX([Date]) as EndDate 
from 
(
    Select 
    *, 
    ROW_NUMBER() OVER(PARTITION BY RoomID ORDER BY [Date] asc) as ranking 
    from tbl 
) t 
group by 
    RoomID, (CAST([Date] AS INT)-Ranking) 
order by 
    RoomID, (CAST([Date] AS INT)-Ranking) 
+0

感谢您的答案我已经试过你的代码,但得到这个错误: 'PARTITON'附近的语法不正确。 我不确定这个错误是什么意思,或者如何解决它。我的TSQL脚本非常有限 – NoxiaZ

+0

我犯了一个错字。更新! – DhruvJoshi

+0

非常感谢,这段代码工作得很完美。 – NoxiaZ

相关问题