2016-08-21 12 views
0

スタッフの作業ログを記録するテーブルがあります。 staffid、orderid、Startingtime、endingtimeなどの表の列。開始時刻と終了時刻の2つの時間の違いを調べる方法はわかっています。しかし、私は、労働者が別の仕事を始めるのに何分も時間がかかることを知る必要があります。ここで staffid workid Startingtime endingtime timetaken 100 10222 11.30午後11.50午後20 100 20122 11.55午後01.55午後120 私は、スタッフが2つのワーク間の経過どのように多くの分を計算する必要があります。(ここでは5分11.50pmと11.55午後)2つのエントリ間の経過時間の計算

答えて

0

目的の結果に対して以下のクエリクエリを使用します。 注:クエリは、すべてのスタッフに対して毎日実行されます。

CREATE TABLE dbo.CalcTimeDiff 
(Staffid INT 
    ,Orderid INT 
    ,Startingtime DateTime 
    ,Endingtime Datetime 
) 
GO 


INSERT INTO dbo.CalcTimeDiff 
SELECT '1','1','2016-08-21 11:30:00.000','2016-08-21 11:50:00.000' 
UNION 
SELECT '1','2','2016-08-21 11:55:00.000','2016-08-21 13:55:00.000' 
GO 

以下のクエリは、経過時間を分単位で示します。ここ

SELECT StaffiD,DATEDIFF(MINUTE,MIN(Startingtime),MAX(endingtime))-SUM(DATEDIFF(MINUTE,Startingtime,endingtime)) LapsedTime 
FROM dbo.CalcTimeDiff 
GROUP BY StaffiD,convert(date,Startingtime) 
GO 
0

作業ログは、 ':50 AM '11 iとして格納された結果、' テーブルの名前との代わりに'11 0.50 AMです。私はそれがあなたの問題を解決すると思います。

DECLARE @DIFFERENCE INT,@TIME1 VARCHAR(10),@TIME2 VARCHAR(10),@ID INT 
DECLARE @TEMP_DATE TABLE (ID INT IDENTITY(1,1),STAFFID INT, WORKID INT, 
STARTINGTIME VARCHAR(10), ENDINGTIME VARCHAR(10), TIMETAKEN INT) 
INSERT INTO @TEMP_DATE SELECT * FROM WORKLOG 

DECLARE C CURSOR FOR 
SELECT ID FROM @TEMP_DATE 
OPEN C 
FETCH NEXT FROM C INTO @ID 
WHILE @@FETCH_STATUS=0 
BEGIN 
IF (@ID != (SELECT COUNT(1) FROM WORKLOG)) 
BEGIN 

SET @TIME1=(SELECT STARTINGTIME FROM @TEMP_DATE WHERE [email protected]) 
SET @TIME2=(SELECT STARTINGTIME FROM @TEMP_DATE WHERE ID=(@ID+1)) 
set @DIFFERENCE=(SELECT DATEDIFF(MINUTE,cast(@TIME1 as time), cast(@TIME2 as time))) 
set @TIME1=(select cast(WORKID as varchar(20)) from @TEMP_DATE where [email protected]) 
set @TIME2=(select cast(WORKID as varchar(20)) from @TEMP_DATE where id=(@id+1)) 
PRINT 'Time difference between workid ('[email protected]+' and '[email protected]+') is => '+cast(@DIFFERENCE as varchar(20)) 
END 
FETCH NEXT FROM C INTO @ID 
END 
CLOSE C 
DEALLOCATE C