将子查询中选择的行严格限制为登录次数,减少查询行数;子查询中也不需要像“2*”那样的和AccessLog.EmployeeId。您不应该在SQL中格式化时间,请将其留给显示代码。可能重复:如果您想要每个员工的总计,则只能选择员工和总计。据我所知,您不需要做
将子查询中选择的行严格限制为登录次数,减少查询行数;子查询中也不需要像“2*”那样的和AccessLog.EmployeeId。您不应该在SQL中格式化时间,请将其留给显示代码。可能重复:如果您想要每个员工的总计,则只能选择员工和总计。据我所知,您不需要做,sql,ms-access,Sql,Ms Access,将子查询中选择的行严格限制为登录次数,减少查询行数;子查询中也不需要像“2*”那样的和AccessLog.EmployeeId。您不应该在SQL中格式化时间,请将其留给显示代码。可能重复:如果您想要每个员工的总计,则只能选择员工和总计。据我所知,您不需要做任何减法运算。表AccessLog有单独的LogDate和LogTime字段。它们可以合并到一个日期/时间字段中吗? SELECT AccessLog.EmployeeID, AccessLog.LogDate,
将子查询中选择的行严格限制为登录次数,减少查询行数;子查询中也不需要像“2*”那样的
和AccessLog.EmployeeId。您不应该在SQL中格式化时间,请将其留给显示代码。可能重复:如果您想要每个员工的总计,则只能选择员工和总计。据我所知,您不需要做任何减法运算。表AccessLog
有单独的LogDate
和LogTime
字段。它们可以合并到一个日期/时间字段中吗?
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;
Format((Sum([Duration])-Int(Sum([Duration]))),"hh:nn:ss") AS TotalTime
SELECT EmployeeID,
month(LogDate),
SUM(int(DateDiff("s", '00:00:00',Duration))) AS abc
FROM (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 (Alias.TerminalID)<>"iGuard1A"
And (Alias.TerminalID)<>"iGuard1B"
AND Alias.EmployeeID = AccessLog.EmployeeID),
"hh:nn:ss") AS PrevTime,
Format((ElapsedTime(iif(PrevTime = '',logtime,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)
GROUP BY EmployeeID, month(LogDate);