我正在尋找一個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/ –
這被稱爲「間隙和孤島」問題。如果你谷歌這個詞,你會發現很多解決方案。 –