2016-03-09 130 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

相關問題