我正在寻找一个select语句或某些可以将多个行组合在一起的情况下,当同一个房间的两个日期之间只有一天时间,结束日期为每个房间的这段时间。MS SQL将日期行组合到起始结束日期
当上一行之间只有一天时,它应该将所有行相同的RoomID
组合起来,而是计算Start Date
和End 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
你在这里试图做的是每个房间的连续日期的群岛。看看这篇文章是一个很好的开始。 http://www.sqlservercentral.com/articles/T-SQL/71550/ –
这被称为“间隙和孤岛”问题。如果你谷歌这个词,你会发现很多解决方案。 –