我正在嘗試編寫一些將假期分組在一起的代碼,併爲每個分組創建一個唯一的ID。我遇到的麻煩是創建團體,以知道他們屬於一起。如何識別連續工作日期?
默認情況下,如果有人要求一個星期關閉5天將得到一個特定的ID(即223)。因此,會有ID 223的5天假期實例,我可以輕鬆獲得開始和結束日期。但如果有人決定預訂星期五休息(ID 224),然後要求星期三和星期四休息(ID 228),然後要求下一個星期一休息(ID 230),那麼我有3個獨立的實際實際情況一個假期,這裏是我需要將它們組合在一起而忽略週末的地方。
我試過DENSE_RANK OVER PARTION
和ROW_NUMBER OVER ORDER
的變體,但是我無法得到它返回我需要的數字。
樣本數據和期望的輸出
SELECT '01-March-2017' AS HolidayDate, DATEPART(WK,'01-March-2017') AS Dw, 223 AS ID_Field, 1000 AS HolidayID
UNION ALL
SELECT '02-March-2017' AS HolidayDate, DATEPART(WK,'02-March-2017') AS Dw, 223, 1000
UNION ALL
SELECT '03-March-2017' AS HolidayDate, DATEPART(WK,'03-March-2017') AS Dw, 223, 1000
UNION ALL
SELECT '24-March-2017' AS HolidayDate, DATEPART(WK,'24-March-2017') AS Dw, 230 , 1001
UNION ALL
SELECT '27-March-2017' AS HolidayDate, DATEPART(WK,'27-March-2017') AS Dw, 235, 1001
UNION ALL
SELECT '20-Sep-2017' AS HolidayDate, DATEPART(WK,'20-Sep-2017') AS Dw, 224, 1002
UNION ALL
SELECT '27-Sep-2017' AS HolidayDate, DATEPART(WK,'27-Sep-2017') AS Dw, 228, 1003
所以上面創建一個例子,節假日ID是所需的列輸出(隨機選擇用於樣品編號)。 ID字段是假期請求提交時生成的編號。
正如你所看到的223請求進來完成,並具有相同的ID,所以我可以選擇MAX(日期),並通過ID_Field得到所需的結果分組。
230和235分別進來但是是同一個假期(作爲一個連續的假期),所以我需要將它們用相同的ID進行分組。
最後225和228是完全獨立的請求,所以需要唯一的號碼。與答案
請嘗試創建http://sqlfiddle.com/案例。 – Anil
3月24日和27日不是連續的日期。請解釋你如何知道哪些日子是「相鄰的」。你如何考慮假期? –
@GordonLinoff他們是連續工作日 – GPH