Database MS Access查询考勤时间输入/输出
我正在做一个涉及时间和出勤管理的项目。当我从生物识别阅读器下载数据时,我得到了以下格式的记录:Database MS Access查询考勤时间输入/输出,database,vba,ms-access,Database,Vba,Ms Access,我正在做一个涉及时间和出勤管理的项目。当我从生物识别阅读器下载数据时,我得到了以下格式的记录: USERID CHECKTIME 5001 12/09/2011 09:05:34 5002 12/09/2011 09:33:13 5001 12/09/2011 13:05:53 5002 12/09/2011 13:22:24 5001 12/09/2011 14:05:22 5002 12/09/2011 14:33:53 5001 12
USERID CHECKTIME
5001 12/09/2011 09:05:34
5002 12/09/2011 09:33:13
5001 12/09/2011 13:05:53
5002 12/09/2011 13:22:24
5001 12/09/2011 14:05:22
5002 12/09/2011 14:33:53
5001 12/09/2011 18:05:09
5002 12/09/2011 17:44:34
这就是图像
我想将上述记录显示如下:,
(登录、注销、登录、注销、工作时间和午休时间基于“时间”)
这就是图像
请帮助我进行此查询,您可以按用户ID和日期分组,然后使用条件聚合:
select t.userid, datevalue(t.checktime) as [date],
max(iif(t.counter = 0, t.checktime, null)) as Log_In,
max(iif(t.counter = 1, t.checktime, null)) as LB_Out,
max(iif(t.counter = 2, t.checktime, null)) as LB_In,
max(iif(t.counter = 3, t.checktime, null)) as Log_Out,
Format((Log_In - LB_Out) + (LB_In - Log_Out), "HH:mm:ss") as WorkTime,
Format(LB_In - LB_Out, "HH:mm:ss") as LunchBreak
from (
select t.*,
(select count(*) from tablename where userid = t.userid and datevalue(checktime) = datevalue(t.checktime) and checktime < t.checktime) as counter
from tablename as t
) as t
group by t.userid, datevalue(t.checktime)
你的意思是有一个假设,你会发现4个时间戳,进,出,出,在中间是“出,在”和午餐休息的迹象?如果是这样的话,你所能找到的任何解决方案都将非常脆弱。。。想象一下,一个人没有午休时间,或者在一天结束时吃午休时间,或者忘记打卡(使用生物识别系统登录/注销,或者……),谢谢您的快速回复。是的,正如你所看到的,我每个人有4个日志。第一个用于输入,第二个用于BrackOut,第三个用于BrackIN,第四个用于输出,或者如果某人没有午休时间,他/她的第一个日志将作为输入,最后一个日志将作为输出。除非严格必要,否则请不要使用外部图像:将输出格式复制到您的问题。请将您的评论中的其他数据放入问题中,否则其他人可能会错过它。我不是一个SQL魔术师,但我怀疑它可以在纯SQL中完成…嗨,谢谢你的声明。我已经尝试了您的SQL语句,但它只显示了一个日期相关的第一个日志。是的,我只是将tablename更改为dbo_CHECKINOUI,我用您的示例数据(以及其他几天的附加数据)尝试了这段代码,它返回了您期望的结果。如果您的数据与您在问题中描述的不一样:每个用户每个日期4行,那么我无法判断。谢谢,它现在正在工作。但是如果有人不吃午饭,这样他/她第一个就不会进来,第二个就不会出去了?对不起!因为没有你反应那么快。我是StackOverflow的新用户。
userid date Log_In LB_Out LB_In Log_Out WorkTime LunchBreak
5001 12/9/2011 12/9/2011 9:05:34 am 12/9/2011 1:05:53 pm 12/9/2011 2:05:22 pm 12/9/2011 6:05:09 pm 08:00:06 00:59:29
5002 12/9/2011 12/9/2011 9:33:13 am 12/9/2011 1:22:24 pm 12/9/2011 2:33:53 pm 12/9/2011 5:44:34 pm 06:59:52 01:11:29