Torna al Thread
USE tempdb;
CREATE TABLE dbo.EngineerTime(
EngineerTimeID int NOT NULL IDENTITY PRIMARY KEY,
FirstName varchar(10) NOT NULL,
StartTime datetime NOT NULL,
EndTime datetime NOT NULL
);
INSERT dbo.EngineerTime VALUES('Lorenzo', CURRENT_TIMESTAMP, DATEADD(minute, 5, CURRENT_TIMESTAMP));
WAITFOR DELAY '00:00:12';
INSERT dbo.EngineerTime VALUES('Lorenzo', CURRENT_TIMESTAMP, DATEADD(minute, 2, CURRENT_TIMESTAMP));
WAITFOR DELAY '00:01:00';
INSERT dbo.EngineerTime VALUES('Lorenzo', CURRENT_TIMESTAMP, DATEADD(minute, 8, CURRENT_TIMESTAMP));
WAITFOR DELAY '00:00:28';
INSERT dbo.EngineerTime VALUES('Andrea', CURRENT_TIMESTAMP, DATEADD(minute, 12, CURRENT_TIMESTAMP));
WAITFOR DELAY '00:00:45';
INSERT dbo.EngineerTime VALUES('Andrea', CURRENT_TIMESTAMP, DATEADD(minute, 1, CURRENT_TIMESTAMP));
WAITFOR DELAY '00:02:16';
INSERT dbo.EngineerTime VALUES('Gianluca', CURRENT_TIMESTAMP, DATEADD(minute, 23, CURRENT_TIMESTAMP));
SELECT *
FROM dbo.EngineerTime;
/* Output:
EngineerTimeID FirstName StartTime EndTime
-------------- ---------- ----------------------- -----------------------
1 Lorenzo 2007-10-22 10:48:49.263 2007-10-22 10:53:49.263
2 Lorenzo 2007-10-22 10:49:01.263 2007-10-22 10:51:01.263
3 Lorenzo 2007-10-22 10:50:01.263 2007-10-22 10:58:01.263
4 Andrea 2007-10-22 10:50:29.263 2007-10-22 11:02:29.263
5 Andrea 2007-10-22 10:51:14.263 2007-10-22 10:52:14.263
6 Gianluca 2007-10-22 10:53:30.263 2007-10-22 11:16:30.263
(6 row(s) affected)
*/
WITH CTE_SecondsPerUser([User], Seconds) AS
(
SELECT FirstName, SUM(DATEDIFF(SECOND, StartTime, EndTime))
FROM dbo.EngineerTime
GROUP BY FirstName
)
SELECT
[User]
, (Seconds / 86400) AS Days
, (Seconds / 3600) - (Seconds / 86400 * 24) AS Hours
, (Seconds / 60) - (Seconds / 86400 * 1440) - ((Seconds / 3600) - (Seconds / 86400 * 24) * 60) AS Minutes
, (Seconds % 60) AS Seconds
FROM CTE_SecondsPerUser;
/* Output:
User Days Hours Minutes Seconds
---------- ----------- ----------- ----------- -----------
Andrea 0 0 13 0
Gianluca 0 0 23 0
Lorenzo 0 0 15 0
(3 row(s) affected)
*/
DROP TABLE dbo.EngineerTime;