2014-01-18 111 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