可能重复:
同一表中两条记录之间的日期差异
我是 MS Access 的新手,知道一点 SQL,这是我在这里的第一个问题。在提出问题之前,我进行了很多搜索以找到合适的解决方案。这是场景:
我有一个具有以下结构的表:
RCDID-- EmployeeID-- LogDate-- LogTime-- terminalID-- InOut
1 -----------2001---------1/4 /2012---15:39:27----iGuard3A-----IN
2 -----------2023---------1/4/2012-- -15:45:27----iGuard3A-----IN
3 -----------2001---------1/4/2012---15:47 :29----iGuard3A-----Out
最后的要求是获取每个员工 id 每个月的总工作时间。主要问题是登录和注销时间在不同的记录上。但我已经这样做了,我的意思是我写了一个 sql 来为每个登录注销时间间隔计算另一个。使用其他一些标准,我的 sql 如下:
SELECT AccessLog.EmployeeID,
AccessLog.LogDate,
AccessLog.TerminalID,
AccessLog.LogTime,
Format((SELECT MAX(LogTime)
FROM AccessLog AS Alias
WHERE Alias.LogTime < AccessLog.LogTime
AND Alias.EmployeeID = AccessLog.EmployeeID
AND Alias.LogDate = AccessLog.LogDate
AND AccessLog.TerminalID <> "iGuard1A"
AND AccessLog.TerminalID <> "iGuard1B"
AND AccessLog.EmployeeID LIKE "2*"),"hh:nn:ss") AS PrevTime,
Format((ElapsedTime([PrevTime],[LogTime])),"hh:nn:ss") AS Duration,
AccessLog.InOut
FROM AccessLog
WHERE AccessLog.TerminalID <> "iGuard1A"
AND AccessLog.TerminalID <> "iGuard1B"
AND AccessLog.EmployeeID LIKE "2*"
AND AccessLog.InOut = "OUT"
ORDER BY AccessLog.EmployeeID, AccessLog.LogDate, AccessLog.LogTime;
事实证明,这对我来说是一个复杂的问题。但因为这是我第一次在访问方面工作,所以我从一开始就没有意识到一切。我计算了 prevtime 并将其用作相应注销时间记录的登录时间。
现在我的目标是计算每个员工 ID 的总持续时间。我使用了以下代码。但它需要我不确定的 group by 子句。
Format((Sum([Duration])-Int(Sum([Duration]))),"hh:nn:ss") AS TotalTime
这个总时间将基于每个月。
任何帮助将不胜感激。我是不是走错了路。我应该为此目的使用 vba 和报告吗?