我在TIME數據類型列中有一個包含員工登錄持續時間詳細信息的表XYZ。在SQL服務器上使用T-SQL獲取正在運行的總時間列
EmployeeID | DomainID | LoginDuration
----------------------------------------------------------------
1111 12 02:32:55:0000000
1111 4 00:57:17.0000000
1111 12 01:06:25.0000000
1111 11 03:31:23.0000000
2222 11 02:42:17.0000000
2222 4 03:54:52.0000000
2222 10 04:08:29.0000000
除了以上的專欄中,我也有LoginTimeStamp
和LoginWeek
列,我使用的JOIN語句其中。
我試圖獲得用於LoginDuration
柱運行總計如下:
EmployeeID | DomainID | HoursBefore | LoginDuration | HoursAfter |
---------------------------------------------------------------------------------
1111 12 00:00:00.0000000 02:32:55:0000000 **00:00:00.0000000**
1111 4 02:32:55.0000000 00:57:17.0000000 03:30:12.0000000
1111 12 03:30:12.0000000 01:06:25.0000000 04:36:37.0000000
1111 11 04:36:37.0000000 03:31:23.0000000 08:08:00.0000000
2222 11 00:00:00.0000000 02:42:17.0000000 **00:00:00.0000000**
2222 4 01:32:31.0000000 03:54:52.0000000 04:14:48.0000000
2222 10 04:14:48.0000000 04:08:29.0000000 08:09:40.0000000
HoursBefore是HoursAfter的先前值(00:00:00爲每個員工的第一行)
HoursAfter = HoursBefore + LoginDuration
爲此,我寫了下面的查詢,但我在HoursAfter
列出現錯誤。它不會爲每個員工增加當前值和以前的值。
SELECT
a.EmployeeID,a.LoginDuration,
COALESCE(CAST(
DATEADD(ms,
SUM(DATEDIFF(ms,0,CAST(b.LoginDuration as datetime)))
, 0)
as time)
,'00:00:00') AS HoursBefore,
a.LoginDuration as Hours,
COALESCE(CAST(
DATEADD(ms,
SUM(DATEDIFF(ms,0,CAST(b.LoginDuration as datetime)))
, a.Loginduration)
as time)
,'00:00:00') As HoursAfter
FROM XYZ AS a
LEFT OUTER JOIN XYZ AS b
ON (a.EmployeeID = b.EmployeeID)
AND (a.LoginWeek = b.LoginWeek)
AND (b.LoginTimeStamp < a.LoginTimeStamp)
GROUP BY a.EmployeeID, a.LoginTimeStamp,a.LoginDuration
ORDER BY a.LoginWeek, a.EmployeeID, a.LoginTimeStamp;
我需要幫助與查詢,從而爲每個員工HoursAfter
列爲宜。
任何幫助將不勝感激。 (這是我的第一個查詢,如果您需要更多詳細信息,請回復。)
謝謝。
什麼時間前幾小時和幾小時後? – sagi
粘貼DDL,DML查詢非常簡單。查看此Addin:https://github.com/nycdotnet/TSqlFlex .. – TheGameiswar
Hello Ivan, HoursBefore是HoursAfter的以前值(00:00:00爲第一行每個員工) HoursAfter = HoursBefore + LoginDuration –