【问题标题】:How can I calculate time difference between 2 different rows for the same user如何计算同一用户的 2 个不同行之间的时间差
【发布时间】:2019-07-19 14:11:42
【问题描述】:

每个员工进出房间时通常都有一个进出时间,有时会因为人们忘记刷卡和尾随另一名员工而造成混乱。我想计算在房间里花费的时间。

报告显示:

  1. user1 在门口时间
  2. user1 外出时间
  3. user2 在门口时间
  4. user2 外出时间
  5. 等
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 外出时间

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

【问题讨论】:

  • 您面临的问题是什么?您的样本数据在哪里?你有你的查询,那么输出有什么问题?
  • 如果数据类似于我们门系统的数据,这最终将成为一个间隙和孤岛问题。
  • @dfundako 我正在寻找一种方法来添加具有时间差/用户的计算列。例如。 user1 在 door1 10:00,user1 在 door2 10:05。 user1 在那个房间里呆了 5 分钟

标签: sql-server reportbuilder3.0


【解决方案1】:

一般来说,对于行间的操作,LAG函数是goto解决方案。

LAG (Transact-SQL)

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

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

【讨论】:

  • 谢谢你这是我需要的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-13
  • 2020-02-14
  • 2019-11-18
  • 2019-08-12
相关资源
最近更新 更多