表明:DAIMA
單號 操作人員 接受人員 動作代碼 操作時間
123456789 A E 501 2020/9/28 9:40
123456789 A B 501 2020/9/28 9:42
123456789 B A 502 2020/9/28 9:50
123456789 A C 501 2020/9/28 10:41
123456789 C A 502 2020/9/28 10:51
123456789 A D 501 2020/9/28 15:40
123456789 D A 502 2020/9/28 16:40
請教一下,需要計算接受人員B,C,D的處理時長,動作502的時間減去動作501的時間,請問SQL如何實作以下效果:
接受人員 處理時間
B 0.006
C 0.007
D 0.042
uj5u.com熱心網友回復:
CREATE TABLE #T
(
單號 VARCHAR(10),
操作人員 VARCHAR(10),
接受人員 VARCHAR(10),
動作代碼 INT,
操作時間 DATETIME
)
INSERT INTO #T VALUES('123456789', 'A', 'E', 501 ,'2020/9/28 9:40')
INSERT INTO #T VALUES('123456789', 'A', 'B', 501 ,'2020/9/28 9:42')
INSERT INTO #T VALUES('123456789', 'B', 'A', 502 ,'2020/9/28 9:50')
INSERT INTO #T VALUES('123456789', 'A', 'C', 501 ,'2020/9/28 10:41')
INSERT INTO #T VALUES('123456789', 'C', 'A', 502 ,'2020/9/28 10:51')
INSERT INTO #T VALUES('123456789', 'A', 'D', 501 ,'2020/9/28 15:40')
INSERT INTO #T VALUES('123456789', 'D', 'A', 502 ,'2020/9/28 16:40')
SELECT a.接受人員,CONVERT(NUMERIC(18,3),DATEDIFF(mi,a.操作時間,b.操作時間)/60.0/24) AS 時間
FROM
(
SELECT * FROM #T WHERE 動作代碼 = 501
)
A INNER JOIN
(
SELECT * FROM #T WHERE 動作代碼 = 502
)
B ON a.接受人員=b.操作人員
DROP TABLE #T
uj5u.com熱心網友回復:
請教多一個問題,如果接受人員都是同一人員的情況下,SQL要如何變化呀?單號 操作人員 接受人員 動作代碼 操作時間
123456789 A E 501 2020/9/28 9:40
123456789 A B 501 2020/9/28 9:42
123456789 B A 502 2020/9/28 9:50
123456789 A B 501 2020/9/28 10:41
123456789 B A 502 2020/9/28 10:51
123456789 A B 501 2020/9/28 15:40
123456789 B A 502 2020/9/28 16:40
uj5u.com熱心網友回復:
e.g.use Tempdb
go
--> --> 中國風(Roy)生成測試數據
if not object_id(N'Tempdb..#DAIMA') is null
drop table #DAIMA
Go
Create table #DAIMA([單號] bigint,[操作人員] nvarchar(101),[接受人員] nvarchar(101),[動作代碼] bigint,[操作時間] Datetime)
Insert #DAIMA
select 123456789,N'A',N'E',501,'2020/9/28 9:40' union all
select 123456789,N'A',N'B',501,'2020/9/28 9:42' union all
select 123456789,N'B',N'A',502,'2020/9/28 9:50' union all
select 123456789,N'A',N'C',501,'2020/9/28 10:41' union all
select 123456789,N'C',N'A',502,'2020/9/28 10:51' union all
select 123456789,N'A',N'D',501,'2020/9/28 15:40' union all
select 123456789,N'D',N'A',502,'2020/9/28 16:40'
Go
SELECT a.[接受人員],CAST(DATEDIFF(s,a.操作時間,b.操作時間)/60.0/60.0/24 AS DECIMAL(18,3)) AS 小時
FROM (SELECT *
,ROW_NUMBER() OVER (PARTITION BY [接受人員] ORDER BY [操作時間]) AS RN
FROM #DAIMA
WHERE 動作代碼=501) AS a INNER JOIN (SELECT *
,ROW_NUMBER() OVER (PARTITION BY [操作人員] ORDER BY [操作時間]) AS RN
FROM #DAIMA
WHERE 動作代碼=502) AS b ON a.接受人員=b.操作人員
AND a.RN=b.RN;
/*
接受人員 小時
B 0.006
C 0.007
D 0.042
*/
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/142030.html
標籤:基礎類
上一篇::Microsoft SQL Server 2012 Service Pack 1 安裝程式
下一篇:SQL陳述句求助大佬
