我需要做一个查询来显示一个人在办公室呆了多少次。我有一个列表,它创建了一个人进入办公室时的记录,以及当人离开办公室时的记录和其他记录。我有一些困难,因为一个人可以在同一天多次进入/退出,有时一个人没有注册你的进入或退出。按照示例进行操作
╔════════════╦════════════╦════════════════════╦═════════════════╦═════════╦═══════╗
║ Local Date ║ Local Time ║ Employee ║ Office ║ Catraca ║ Staus ║
╠════════════╬════════════╬════════════════════╬═════════════════╬═════════╬═══════╣
║ 11/7/2012 ║ 10:16 ║ SILVA ,ANDRE BRAGA ║ Alexandre Duma ║ 002 ║ In ║
║ 11/7/2012 ║ 13:03 ║ SILVA ,ANDRE BRAGA ║ Alexandre Dumas ║ 004 ║ Out ║
║ 11/7/2012 ║ 15:19 ║ SILVA ,ANDRE BRAGA ║ Alexandre Dumas ║ 004 ║ Out ║
║ 11/7/2012 ║ 15:25 ║ SILVA ,ANDRE BRAGA ║ Alexandre Dumas ║ 004 ║ In ║
║ 11/7/2012 ║ 18:31 ║ SILVA ,ANDRE BRAGA ║ Alexandre Dumas ║ 004 ║ Out ║
║ 11/7/2012 ║ 18:40 ║ SILVA ,ANDRE BRAGA ║ Alexandre Dumas ║ 004 ║ In ║
║ 11/7/2012 ║ 19:56 ║ SILVA ,ANDRE BRAGA ║ Alexandre Dumas ║ 004 ║ Out ║
╚════════════╩════════════╩════════════════════╩═════════════════╩═════════╩═══════╝在这个例子中,这个人在办公室待了7:09个小时。
雷加德·安德烈
发布于 2012-12-14 13:43:56
好了,把它加起来相当简单。在没有匹配的时间戳的情况下消除时间戳更加困难。
至于总计:日期和时间在内部存储为数字。假设没有人工作到午夜,那么你所要做的就是把所有的"In“时间加起来,再从所有的"Out”时间中减去。如下所示:
SELECT [TotOut]-[TotIn] AS TotHours, *
FROM (SELECT CheckIn.Employee, CheckIn.[Local Date], Sum(CheckIn.[Local Time]) AS [TotIn]
FROM CheckIn
WHERE (((CheckIn.Staus)="In"))
GROUP BY CheckIn.Employee, CheckIn.[Local Date]) AS TotIn INNER JOIN (SELECT CheckIn.Employee, CheckIn.[Local Date], Sum(CheckIn.[Local Time]) AS [TotOut]
FROM CheckIn
WHERE (((CheckIn.Staus)="Out"))
GROUP BY CheckIn.Employee, CheckIn.[Local Date]) AS TotOut ON (TotIn.Employee = TotOut.Employee) AND (TotIn.[Local Date] = TotOut.[Local Date]);消除不匹配的时间是可能的,但很困难。这个查询完成了大部分任务。但是,它跳过了第一个记录,因此需要调整。
SELECT A.ID, A.[Local Time], B.[Local Time] AS [Prev Time], A.Staus
FROM CheckIn AS A LEFT JOIN CheckIn AS B ON (A.Employee = B.Employee) AND (A.[Local Date] = B.[Local Date])
WHERE (((B.[Local Time])=DMax("[local time]","[checkin]","[local time] < #" & [a].[Local Time] & "#")) AND ((A.Staus)<>[b].[staus]))
ORDER BY A.[Local Time];此外,您还需要首先创建一个记录集,该记录集跳过以"Out“状态开始的任何记录。Here's an article that may help。
https://stackoverflow.com/questions/13871891
复制相似问题