【发布时间】:2020-02-08 15:57:50
【问题描述】:
我正在尝试获取有关处理工单所花费时间的报告。基本上,我有多名员工在处理一张工单,并且想报告他们在工单上工作了多少时间。
例如:
员工 A 从中午 12 点到下午 5 点处理了一张工单,在此期间,工单处于“待处理”状态一个小时,即从下午 3 点到下午 4 点......这需要从员工花费的总时间中排除票上的A。
计算:
时差:5
待处理状态小时:1
以小时为单位的最后时间:4
我需要您的帮助,了解如何通过 SQL 完成此操作。
这是我目前所拥有的:
DROP TABLE IF EXISTS #INC_Data;
CREATE TABLE #INC_Data (
IncidentNumber NVARCHAR(20) NOT NULL
,Mi_Definition VARCHAR(255) NOT NULL
,Mi_Value VARCHAR(255)
,Mi_Start DATETIME
,Mi_End DATETIME
)
INSERT INTO #INC_Data (
IncidentNumber
,Mi_Definition
,Mi_Value
,Mi_Start
,Mi_End
)
VALUES (
'INC8574030'
,'Create to Resolve Duration'
,NULL
,'10/30/2019 7:26:20 PM'
,'10/30/2019 7:56:40 PM'
)
,(
'INC8574030'
,'Incident State Duration'
,'Active'
,'10/30/2019 7:26:22 PM'
,'10/30/2019 7:28:21 PM'
)
,(
'INC8574030'
,'Assignment Group'
,'Unix-Lev-L1-team2'
,'10/30/2019 7:26:22 PM'
,'11/8/2019 8:00:28 PM '
)
,(
'INC8574030'
,'Incident State Duration'
,'In Progress'
,'10/30/2019 7:28:21 PM'
,'10/30/2019 7:56:30 PM'
)
,(
'INC8574030'
,'Assigned to Duration'
,'Ayush Chauhan'
,'10/30/2019 7:28:21 PM'
,'11/8/2019 8:00:28 PM '
)
,(
'INC8574030'
,'Incident State Duration'
,'Pending'
,'10/30/2019 7:56:28 PM'
,'10/30/2019 7:56:40 PM'
)
,(
'INC8574030'
,'Incident State Duration'
,'Resolved'
,'10/30/2019 7:56:40 PM'
,'11/8/2019 8:00:28 PM '
)
,(
'INC8574030'
,'Incident State Duration'
,'Closed'
,'11/8/2019 8:00:28 PM'
,NULL
)
,(
'INC8909432'
,'Create to Resolve Duration'
,NULL
,'12/23/2019 7:31:14 PM'
,'12/24/2019 12:59:29 PM'
)
,(
'INC8909432'
,'Incident State Duration'
,'Active'
,'12/23/2019 7:31:18 PM'
,'12/23/2019 7:42:59 PM'
)
,(
'INC8909432'
,'Assignment Group'
,'TDS-IS Data Compliance'
,'12/23/2019 7:31:18 PM'
,'1/2/2020 2:00:18 PM'
)
,(
'INC8909432'
,'Incident State Duration'
,'In Progress'
,'12/23/2019 7:42:59 PM'
,'12/23/2019 7:57:33 PM'
)
,(
'INC8909432'
,'Assigned to Duration'
,'Deepika N'
,'12/23/2019 7:42:59 PM'
,'12/23/2019 7:57:33 PM'
)
,(
'INC8909432'
,'Incident State Duration'
,'Pending'
,'12/23/2019 7:57:33 PM'
,'12/24/2019 12:59:29 PM'
)
,(
'INC8909432'
,'Assigned to Duration'
,'Gowtham Komisettu'
,'12/23/2019 7:57:33 PM'
,'12/24/2019 12:18:44 PM'
)
,(
'INC8909432'
,'Assigned to Duration'
,'Abhinav P'
,'12/24/2019 12:18:44 PM'
,'1/2/2020 2:00:18 PM'
)
,(
'INC8909432'
,'Incident State Duration'
,'Resolved'
,'12/24/2019 12:59:29 PM'
,'1/2/2020 2:00:18 PM'
)
,(
'INC8909432'
,'Incident State Duration'
,'Closed'
,'1/2/2020 2:00:18 PM'
,NULL
)
--SELECT * FROM #INC_Data
--Order by IncidentNumber, Mi_Start
查询以计算受让人在工单上花费的时间并排除其下的待处理时间
;WITH CTE
AS (
SELECT d.IncidentNumber
,d.Mi_Definition
,d.Mi_Value
,d.Mi_Start
,d.Mi_End
,DATEDIFF(MINUTE, d.Mi_Start, d.Mi_End) AS Duration_in_Minutes
FROM #INC_Data d
WHERE (
d.Mi_Definition = 'Assigned to Duration'
OR d.Mi_Value = 'Pending'
)
)
,Total
AS (
SELECT C.IncidentNumber
,C.Mi_Value AS [Assigned / Pending]
,SUM(C.Duration_in_Minutes) AS [Total (Min)]
FROM CTE C
GROUP BY C.IncidentNumber
,C.Mi_Value
)
SELECT T.IncidentNumber
,T.[Assigned / Pending]
,T.[Total (Min)]
,CASE
WHEN T.[Total (Min)] < 0
AND T.[Total (Min)] > - 60
THEN '-'
ELSE TRY_CAST(T.[Total (Min)] / 60 AS VARCHAR) + ':' + right('0' + CAST(ABS(T.[Total (Min)]) % 60 AS VARCHAR(2)), 2)
END [Total (HH:mm:ss)]
FROM Total T
ORDER BY T.IncidentNumber
,T.[Assigned / Pending]
【问题讨论】:
-
您好@Praveen 为清楚起见,根据给出的数据,Mi_Start 和 Mi_End 是什么意思。例如,Ayush Chauhan 的 Mi_Start 为“2019-10-30 19:28:21.000”,Mi_End 为“2019-11-08 20:00:28.000”
-
您好 Gnyasha,Mi_start 是票分配给 Ayush 的时间,而 Mi_end 显示的是票分配给其他人的时间。
标签: sql-server tsql date-difference