在不同的行中查找两次之间的时差

时间:2014-01-18 08:13:39

标签: sql linq-to-sql sql-server-2012

场景:生物识别设备的数据库。它插入

EmpId, EmpName, DepName, RecTime, RecDate

当用户进入办公室并滑动手指然后第二次离开办公室时它会被插入。 RecTime保存输入时间然后退出时间。

问题:

我想计算一个人工作的总时间,但是在插入的第一条记录和插入的第二条记录中找到RecTime之间的差异,以分钟和小时为单位。

我尝试过DateDiff函数,DateSub等,但没有任何效果

1 个答案:

答案 0 :(得分: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