在我們的工廠,我們有如下的變化:集團時間戳輪班
- 1:莫 - 週五:上午05時 - 下午1點
- 2:莫 - 週五:下午1點 - 晚上9點
- 3:莫 - 週五:晚上9點 - 凌晨5點
- 4A:週六:上午05時 - 下午5時
- 4B:孫:下午5點 - 上午05點週一
在某個表中,我們有幾個日期我想用查詢進行分組。對於移位1,2和3,此查詢工作正常::
CASE
WHEN DATEPART(hh, c.date_time_stamp) >= 5 AND DATEPART(hh, c.date_time_stamp) < 13 THEN CONVERT(VARCHAR(10), c.date_time_stamp, 103) + ' shift 1'
WHEN DATEPART(hh, c.date_time_stamp) >= 13 AND DATEPART(hh, c.date_time_stamp) < 21 THEN CONVERT(VARCHAR(10), c.date_time_stamp, 103) + ' shift 2'
WHEN DATEPART(hh, c.date_time_stamp) >= 21 AND DATEPART(hh, c.date_time_stamp) < 24 THEN CONVERT(VARCHAR(10), c.date_time_stamp, 103) + ' shift 3'
WHEN DATEPART(hh, c.date_time_stamp) >= 00 AND DATEPART(hh, c.date_time_stamp) < 5 THEN CONVERT(VARCHAR(10), DATEADD(DAY, -1, c.date_time_stamp), 103) + ' shift 3' END AS shift,
這給了我一些shift_id。爲了識別班次4a和4b,我可以擴展case語句,但是我對查詢的性能有點擔心。
任何人都可以給我一個提示如何創建一個函數,以有效的方式返回一個shift_id?謝謝!
編輯:一些示例數據:
inventory_trans_number creation_dt shift_id shift_type container_code
---------------------- ----------------------- -------------------- ---------- ------------------
140952 2013-02-04 01:03:19.043 20130203 03 3 154143591115247892
140956 2013-02-04 01:07:20.343 20130203 03 3 154143591115247939
140962 2013-02-04 01:10:56.417 20130203 03 3 154143591115247991
140968 2013-02-04 01:14:55.250 20130203 03 3 154143591115248134
140970 2013-02-04 01:17:18.883 20130203 03 3 154143591115248196
141070 2013-02-04 02:12:59.327 20130203 03 3 154143591115248240
141076 2013-02-04 02:16:27.480 20130203 03 3 154143591115248356
141092 2013-02-04 02:22:44.067 20130203 03 3 154143591115248530
141096 2013-02-04 02:25:02.157 20130203 03 3 154143591115248585
141102 2013-02-04 02:33:51.253 20130203 03 3 154143591115248615
如果你擔心性能,爲班次ID添加一個額外的列。既可以作爲具有持續值的計算列,也可以使用計算插入/更新時的班次ID的觸發器。把一個索引,完成。 – Tomalak
感謝您的評論,我早些時候曾經想過,但它是一個外部數據庫表(它不是我們的,它是WMS系統的數據庫)... –
@KoenVC給出了上面的示例數據,您期望什麼如果你運行假設函數的結果? – bonCodigo