基本的に、苦情がまだ進行中で解決されていない従業員やその他のケースではなく、苦情が進行中で解決された従業員のターンアラウンドタイムが必要です。
私のテーブルは次のとおりです。
DevEmployee:
EmployeeId EmployeeName
1 Alex
2 Samson
3 Harry
4 Ronney
5 Stoinis
6 Joanna
7 Nicole
8 Fergusion
DevComplain:
ComplainId Complainstatus
1 Open
2 In Progress
3 On Hold
4 Deferred
5 Escalate
6 Resolved
DevEmployeeDetail:
EmployeeId ComplainId ComplainCreatedDate
1 1 2019-01-18 00:00:00.000
1 2 2019-01-20 10:34:09.000
1 3 2119-01-20 05:14:01.110
2 1 2019-01-10 05:14:01.110
2 2 2019-01-11 08:34:01.000
2 3 2019-01-12 01:05:00.000
2 2 2019-01-13 03:07:20.700
2 4 2019-01-14 11:19:20.110
2 2 2019-01-15 12:09:10.110
2 6 2019-01-16 02:49:01.010
3 1 2019-04-22 10:06:12.100
DECLARE @i INT
DECLARE @j INT
DECLARE @lt INT
DECLARE @OnHold DATETIME
DECLARE @OnDeferred DATETIME
DECLARE @OnOpen DATETIME
DECLARE @OnProgress DATETIME
DECLARE @OnEscalate DATETIME
DECLARE @allcount INT
DECLARE @Employee INT
DECLARE @complain INT
DECLARE @date DATETIME
DECLARE @time INT = 0
DECLARE @resdate DATETIME
DECLARE @progdate DATETIME
DECLARE @Eid INT
DECLARE @diff DECIMAL
SET @i = 1
SET @lt = (
SELECT COUNT(*)
FROM (
SELECT MAX(ComplainCreatedDate) AS ResolveTime
,EmployeeId
FROM DevEmployeeDetail
WHERE complainId = 6
GROUP BY EmployeeId
) a
INNER JOIN (
SELECT MIN(ComplainCreatedDate) AS InProgressTime
,EmployeeId
FROM DevEmployeeDetail
WHERE complainId = 2
GROUP BY EmployeeId
) b ON a.EmployeeId = b.EmployeeId
)
WHILE @i <= @lt
BEGIN
SELECT TOP (@i) @eid = a.EmployeeId
,@resdate = a.ResolveTime
,@progdate = b.InProgressTime
FROM (
SELECT MAX(ComplainCreatedDate) AS ResolveTime
,EmployeeId
FROM DevEmployeeDetail
WHERE complainId = 6
GROUP BY EmployeeId
) a
INNER JOIN (
SELECT MIN(ComplainCreatedDate) AS InProgressTime
,EmployeeId
FROM DevEmployeeDetail
WHERE complainId = 2
GROUP BY EmployeeId
) b ON a.EmployeeId = b.EmployeeId
SET @j = 1
SET @allcount = (
SELECT count(*)
FROM DevEmployeeDetail
WHERE @eid = EmployeeId
AND ComplainCreatedDate > @progdate
AND ComplainCreatedDate < @resdate
)
WHILE @j <= @allcount
BEGIN
SELECT TOP (@j) @Employee = EmployeeId
,@complain = complainId
,@date = ComplainCreatedDate
FROM DevEmployeeDetail
WHERE @eid = EmployeeId
AND ComplainCreatedDate > @progdate
AND ComplainCreatedDate < @resdate
SET @j = @j + 1
IF @complain = 3
BEGIN
SET @OnHold = @date
END
IF @complain = 4
BEGIN
SET @OnDeferred = @date
END
IF @complain = 1
BEGIN
SET @OnOpen = @date
END
IF @complain = 5
BEGIN
SET @OnEscalate = @date
END
IF @complain = 2
BEGIN
SET @OnProgress = @date
END
SELECT @Employee EmployeeId
,@progdate InProgressDate
,@resdate ResolvedDate
,datediff(second, @progdate, @resdate) diff
,@complain STATUS
,@OnHold OnHold
,@OnDeferred OnDeferred
,@OnOpen OnOpen
,@OnEscalate OnEscalate
,@OnProgress OnProgress
SET @OnDeferred = NULL
SET @OnHold = NULL
SET @OnOpen = NULL
SET @OnProgress = NULL
SET @OnEscalate = NULL
END
SET @i = @i + 1
SELECT @Eid EmployeeId
,@progdate InProgressDate
,@resdate ResolvedDate
,@complain STATUS
,@OnHold OnHold
,@OnDeferred OnDeferred
,@OnOpen OnOpen
,@OnEscalate OnEscalate
,@OnProgress OnProgress
END;
ComplainStatus が「進行中」および「解決済み」である EmployeeId のみが必要です。これは、ComplainId=2 であり、6 は他の従業員を意味しません。これらの従業員を取得した後、それらの従業員の所要時間を計算したいと思います。
私はこれを試しましたが、まだ欲望の答えを得ることができませんでした