2017-08-01 37 views
-1

我有一個包含進出員工考勤打卡表,其結構是這樣的:獲取啓動SQL Server中的員工輪班的時間和結束時間

InOut 0則意味着時鐘和1時鐘輸出。

EmployeeID LogDate LogTime TerminalID InOut 
150157 1/1/2017 15:44:44 50054 0 
150157 1/1/2017 19:53:01 50054 1 
150157 1/1/2017 19:53:12 50054 1 
150157 1/2/2017 10:40:59 50039 0 
150157 1/2/2017 15:59:23 50058 0 
150157 1/2/2017 21:01:50 50058 1 

我需要的是獲得每天工作班次的開始時間和結束時間。根據表中的數據,結果應該是

Date  Start End Total Hours 
1/1/2017 15:44 19:53 4:09 
1/2/2017 10:40 21:01 10:21 
+0

使用分組依據子句。 –

+0

「LogTime」列的類型是什麼,以及爲什麼要分別存儲日期和時間? –

+2

那麼同樣的人連續兩次從同一個終端登出?如果這種數據結構存在這樣的錯誤,會導致您頭痛。如果你有一個人登錄,註銷,註銷一個終端,並且自己永遠登錄另一個終端,那麼任何答案都將依賴於登錄/退出的順序,如果你有一個人可以永遠忘記登錄/退出「報告 –

回答

0

這是Alexey R的邏輯實現。請注意,雖然它適合您的示例結果,但您永遠不會希望將其用於商業用途,因爲它無法應對您的損壞數據。它需要任何員工在任何地方進行任何登錄的第一個實例,並且使該當天的第一個登錄。它對任何emp,任何終端的最後註銷都是一樣的。如果沒有第一次登錄/最後一次登出,它分別是00:00和23:59。然後它將工作轉變定義爲兩次之間的差異。危險危險:不保證任何人做了類似於工作時間報告的任何事情:

SELECT 
    LogDate, 
    CONCAT(DATEDIFF(minute, firstlogin, lastlogout)/60, ':',DATEDIFF(minute, firstlogin, lastlogout)% 60) as total_hours 
FROM 
    (
    SELECT 
     LogDate, 
     CONVERT(datetime, COALESCE(MIN(CASE WHEN InOut = 0 THEN LogTime END), '00:00:00'), 108) as FirstLogin, 
     CONVERT(datetime, COALESCE(MAX(CASE WHEN InOut = 1 THEN LogTime END), '23:59:59'), 108) as LastLogout 
    FROM table 
    GROUP BY logdate 
) a 
+0

修正了小時計算錯誤邏輯 –

+0

請注意WalkingLoreSuit使用SQL進行的操作;從標題文本看來,您希望每天每個員工都有一份報告,但您希望的輸出示例將刪除「每位員工」部分。如果你想要每個員工,把他的SQL組合成我的 –

1

這將使你在幾分鐘內登錄時間,查找如何分鐘轉換爲HH:MM:SS。如果員工沒有登錄並在每個日期登出,您也會遇到麻煩。

SELECT 
    EmployeeID 
    , LogDate 
    , MIN(CASE WHEN inout = 0 THEN LogTime ELSE NULL END) AS Start 
    , MAX(CASE WHEN InOut = 1 THEN LogTime ELSE NULL END) AS End 
    , DATEDIFF(n, MIN(CASE WHEN inout = 0 THEN LogTime ELSE NULL END), MAX(CASE WHEN InOut = 1 THEN LogTime ELSE NULL END)) 
GROUP BY 
    EmployeeID, LogDate 
+0

從技術上講,這不會產生滿足規範的結果集 –

+0

它用於員工考勤,任何不會由員工ID分組的任何解決方案都會給他期望的輸出,但也不會給他什麼他以文字的形式要求。希望他能從中獲得一些用處。 – WalkingLoreSuit

+0

Yers,我太過於「他們說他們想要的東西」和「他們看起來像他/我認爲他們想要的東西」。>> https://www.tamingdata.com/wp-content/uploads/2010/07/ tree-swing-project-management-large.png我對你的答案表示贊同,以確認每位員工的使用方法 –

相關問題