如何为同一用户计算2个不同行之间的时差

时间:2019-07-19 14:11:42

标签: sql-server reportbuilder3.0

每个员工进出房间时通常都有进出时间,有时会因为人们忘记滑动和拖尾另一位员工而变得混乱。我想计算一下在房间里花费的时间。

该报告显示:

  1. 上门时间的user1
  2. user1出门时间
  3. 上门时间的user2
  4. user2出门时间
SELECT 
    u.userid 
    ,u.[FirstName] + ' ' + u.[LastName] AS EmployeeName
    ,et.name AS [Description]
    ,MAX(e.LoggedTime) AS SwipeTime
    ,d.name AS door
FROM [Users] AS u
LEFT JOIN [Events] AS e ON e.RecordIndex1=u.UserID
LEFT JOIN [EventTypes] AS et on e.EventTypeID = et.EventTypeID
join [Doors] AS d ON e.RecordIndex2 = d.DoorID
WHERE LoggedTime > CONVERT(DATE, GETDATE())  and d.doorid in ( 32, 50, 42, 51, 33) 
GROUP BY 
    u.userid,u.[FirstName] + ' ' + u.[LastName]
    ,et.name
    ,d.name
ORDER BY 
    u.[FirstName] + ' ' + u.[LastName]
    ,MAX(e.LoggedTime)

我希望报告显示:

  1. 上门时间的user1
  2. user1出门时间
  3. 上门时间的user2
  4. user2出门时间

在时间列之后添加一列,用于计算用户进出时间之间的时间差

1 个答案:

答案 0 :(得分:0)

通常,对于行之间的操作,LAG函数是goto解决方案。

LAG (Transact-SQL)

LAG (scalar_expression [,offset] [,default])  
    OVER ( [ partition_by_clause ] order_by_clause )  

您可以使用它来引用前面(或后面使用LEAD)行