在最後一個查詢中,將結果中的第2批次包含爲「處理」的好方法是什麼?每個批次都有幾個子任務。該批次的總體狀況是我正在尋找的。從多行中派生分組的含義
任務狀態的含義:
- 1 =未決
- 2 =處理
- 3 =重試
- 4 =完全
- 5 =失敗
批次狀態:
- 批處理1正在處理中
- 批處理2處於處理過程中,但尚未提取待處理任務。這會在發生這種情況之前的幾秒鐘,所以我對「睡眠」型狀態不感興趣。
- 批次3正在處理一個重試任務
- 批次4未處理,因爲沒有任何東西被拾取。
- 批次5未處理,因爲它已完成
- 批次6未處理,因爲任務失敗。
代碼:
IF OBJECT_ID('tempdb..#t') IS NOT NULL DROP TABLE #t
CREATE TABLE #t (batchId INT, taskStatus INT)
INSERT INTO #t(batchId, taskStatus) VALUES
(1, 1),
(1, 2),
(1, 4),
(2, 1),
(2, 1),
(2, 4),
(2, 4),
(3, 3),
(3, 4),
(4, 1),
(4, 1),
(5, 4),
(5, 4),
(6, 5),
(6, 4)
SELECT
batchId,
1 processing
FROM #t
WHERE taskStatus IN (2,3)
GROUP BY batchId
根據您的狀態代碼,作業2有待處理狀態和完成狀態,您如何考慮/確定作業狀態是使用這兩個代碼進行處理的? –
如果您在taskStatus IN(2,3)上搜索,則taskStatus永遠不會爲空。按taskStatus對輸入進行排序。 「處理它是否處理了一些任務,而其他處理正在進行中」尚不清楚。 – Paparazzi
最後一個查詢中的狀態是針對整個批次的。批處理有幾個子任務,如果某些任務已完成而其他任務處於待處理狀態,則會將其視爲「正在處理」。 –