2016-08-21 1 views
0

Ich habe Tabelle, die das Arbeitsprotokoll des Personals aufzeichnet. Die Tabellenspalten als staffid, orderid, Startingtime, endingtime usw. Ich weiß, wie man den Unterschied zwischen zwei Zeitpunkten findet, dh Start- und Endzeit. Aber ich muss wissen, wie viele Minuten ein Arbeiter vergeht, um eine neue Arbeit zu beginnen. StaffID workid Startingtime endingtime time 100 10222 23.30 11.50 20 100 20122 23.55 01.55 120 Hier muss ich berechnen, wie viele Minuten Personal zwischen zwei Arbeits verstrichen ist. (Hier 5 Minuten 23.50 und 11.55)Berechnung der verstrichenen Zeit zwischen zwei Eintrag

Antwort

0

Verwenden Sie die folgende Abfrage für das gewünschte Ergebnis. Hinweis: Die Abfrage funktioniert täglich mit allen Mitarbeitern.

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 

Die folgende Abfrage gibt Ihnen die verstrichene Zeit in Minuten.

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

Hier worklog ist der Name der Tabelle und statt '11 .50 Uhr 'i gespeicherte Ergebnis als '11: 50 Uhr'. Ich denke, es löst Ihr Problem

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 
Verwandte Themen