将子查询中选择的行严格限制为登录次数,减少查询行数;子查询中也不需要像“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);