2016-08-21 2 views
0

직원의 작업 로그를 기록하는 테이블이 있습니다. staffid, orderid, Startingtime, endingtime 등의 테이블 열. 두 시간 즉 시작 시간과 종료 시간의 차이점을 찾는 방법을 알고 있습니다. 그러나 나는 다른 일을 시작하기 위해 노동자가 얼마나 많은 시간을 보냈는지 알 필요가있다. staffid workid Startingtime endingtime 여기 (100) 10,222 오후 11시 반 오후 11시 50분 20 100 20,122 오후 11시 55분 오후 1시 55분 120 timetaken 전 직원이 두 작업 사이의 경과 시간 (분)을 계산해야합니다. (여기 오분 오후 11시 50분과 오후 11시 55분)두 엔트리 사이의 경과 시간 계산

답변

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

여기서 worklog는 테이블의 이름이고 '11 .50 AM '대신 '11 : 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 
관련 문제