如何计算同一用户的两个不同行之间的时间差
How can I calculate time difference between 2 different rows for the same user
每个员工进出房间时通常都有一个进出时间,有时可能会搞砸,因为人们忘记刷卡并尾随另一名员工。我想计算在房间里的时间
报告显示:
- 用户1在门时间
- user1外出时间
- 用户2在门时间
- 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在门时间
- user2外出时间
在时间列之后添加一列,计算用户进出时间之间的时间差
一般来说,对于行间的操作,LAG函数就是goto的解决方案。
LAG (scalar_expression [,offset] [,default])
OVER ( [ partition_by_clause ] order_by_clause )
您可以使用它来引用前面的(或使用 LEAD 的后面的)行
每个员工进出房间时通常都有一个进出时间,有时可能会搞砸,因为人们忘记刷卡并尾随另一名员工。我想计算在房间里的时间
报告显示:
- 用户1在门时间
- user1外出时间
- 用户2在门时间
- 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在门时间
- user2外出时间
在时间列之后添加一列,计算用户进出时间之间的时间差
一般来说,对于行间的操作,LAG函数就是goto的解决方案。
LAG (scalar_expression [,offset] [,default])
OVER ( [ partition_by_clause ] order_by_clause )
您可以使用它来引用前面的(或使用 LEAD 的后面的)行