2014-01-18 118 views
-1

場景:生物識別設備的數據庫。它插入查找不同行中兩次之間的時間差

EmpId, EmpName, DepName, RecTime, RecDate 

當用戶進入辦公室並輕掃手指,然後第二次離開辦公室時,它被插入。 RecTime保存輸入時間和退出時間。

問題:

我要計算總時間一個人的工作,但被插在第一條記錄RECTIME之間尋找差異和插入第二紀錄,分鐘和小時。

我試過DateDiff函數,DateSub等,但沒有奏效

+0

是'EmpId'在這兩種情況下,由於 – Jijo

+0

有向下投票沒有DDL相同,現在樣本數據 – MarkD

回答

0

不會解決你的問題,因爲沒有足夠的數據來這樣做。 我會遵循的方法模式是;

CREATE TABLE #EmpLogging 
(
    LogID INT, 
    EmpId INT, 
    EmpName VARCHAR(50), 
    DepName VARCHAR(50), 
    RecTime TIME, 
    RecDate DATE 
) 
INSERT INTO #EmpLogging 
SELECT 1, 1, 'Fred',  'Legal',  '08:00:00', '2013-01-01' UNION ALL 
SELECT 2, 2, 'Susan', 'Marketing', '08:03:00', '2013-01-01' UNION ALL 
SELECT 3, 1, 'Fred',  'Legal',  '17:00:00', '2013-01-01' UNION ALL 
SELECT 4, 2, 'Susan', 'Marketing', '17:55:00', '2013-01-01'  

;WITH EmpSequence AS 
(
    SELECT * 
      ,EmpSeq = ROW_NUMBER() OVER (PARTITION BY EmpId ORDER BY RecDate, RecTime) 
    FROM #EmpLogging  
) 
,EndTime AS 
(
    SELECT E1.* 
      ,OutTime = E2.RecTime 
      ,OutDate = E2.RecDate 
    FROM EmpSequence E1 
    LEFT 
    JOIN EmpSequence E2 ON E1.EmpId = E2.EmpId 
          AND E1.EmpSeq = E2.EmpSeq - 1 
) 
SELECT * 
     ,MINUTETimeFrame = DATEDIFF(MI, RecTime, OutTime) 
FROM EndTime 

enter image description here

+0

不工作,給人日期只有 –

+0

看來,當我執行它做工精細,見上面的圖片。 – MarkD