2012-11-18 32 views
0

我們有一個SQL 2008表,它按以下順序保存考勤數據。SQL時鐘數據操作

 
uid clock       collectdate     type 

1 2012-10-30 16:13:07.000   2012-10-30 19:29:58.000  in 
1 2012-10-30 21:18:50.000   2012-10-30 22:29:58.000  in 
2 2012-10-30 16:13:07.000   2012-10-30 19:29:58.000  in 
2 2012-10-30 21:18:50.000   2012-10-30 22:29:58.000  in 

正確的順序是將「類型」欄作爲輸入和輸出。但這正是我所面臨的問題,因爲該系統正用於管理承包商和兼職人員,他們總是錯過按下正確的按鈕,或者根本沒有在進入或退出打卡之前的時鐘。

目前,我們依賴於這個存儲過程把時鐘進度數據以正確的順序

 
    INSERT INTO attendanceTBL (UID,CollectDate,Clockin,Clockout) 

SELECT 
UID 
,CollectDate 
,MAX(case when type = 'in' then clock end) clockin 
,MAX(case when type = 'Out' then clock end) clockout 
From RAWCLOCKTBL 
GROUP BY UID,CollectDate 
RETURN 

有什麼辦法,我可以而忽略了正確的順序「時鐘」值轉移到同一行「類型」欄。即將上表移動到。

 
uid clock       clock    
1  2012-10-30 16:13:07.000  2012-10-30 21:18:50.000 
2  2012-10-30 16:13:07.000  2012-10-30 21:18:50.000 
+0

這可能只是我,對不起。但是,您希望的輸出與SELECT uid,MIN(clock),MAX(clock)FROM attendanceTBL GROUP BY uid'不同的是什麼? – MatBailie

+0

這會給我結果的整個日期時間範圍每日最小,最大時間instate。 – Bladefreak

回答

0

以下查詢將每個日期的UID的IN和OUT時間以及UID和DATE上的JOIN分組以獲得所需的輸出。 LEFT JOIN將確保在沒有OUT的情況下返回這些條目(如果需要的話)。

SELECT 
    A.UID, 
    CONVERT(DATE, clock) 'ClockDate', 
    min(clock) 'ClockIn', 
    max(clock) 'ClockOut' 
FROM 
    attendanceTBL 
GROUP BY uid, CONVERT(DATE, clock) 
+0

輝煌!感謝您的解決方案。 – Bladefreak

+0

這與SELECT UID,CONVERT(DATE,clock)'ClockDate',min(clock)'ClockIn',max(clock)'ClockOut'FROM attendanceTBL group by uid是否相同,轉換(日期,時鐘)'? – MatBailie

+0

這不處理尚未註銷的情況,@Dems。 – Vikdor