Sql Microsoft Access中的出席人数查询

Sql Microsoft Access中的出席人数查询,sql,datetime,ms-access,time-and-attendance,Sql,Datetime,Ms Access,Time And Attendance,这是我第一次在这个论坛上发帖。一周来,我一直在努力用微软Access编写一个查询,希望这里的人能帮我解决这个问题。我正在vb6中使用指纹创建考勤应用程序 该表如下所示: 正如您在表中所看到的,员工一天可以签入和签出两次以上。我的问题是:如何在OriginType列中确定哪一行是输入还是输出?当员工第一次签入时,原始类型应为I。当他第二次签入时,原始类型应为O。当他第三次签入时,原始类型应再次为I,依此类推 与上一个问题不同的第二个问题 我想编写一个从timeInOut列中进行选择的查询。我希望桌

这是我第一次在这个论坛上发帖。一周来,我一直在努力用微软Access编写一个查询,希望这里的人能帮我解决这个问题。我正在vb6中使用指纹创建考勤应用程序

该表如下所示:

正如您在表中所看到的,员工一天可以签入和签出两次以上。我的问题是:如何在OriginType列中确定哪一行是输入还是输出?当员工第一次签入时,原始类型应为I。当他第二次签入时,原始类型应为O。当他第三次签入时,原始类型应再次为I,依此类推

与上一个问题不同的第二个问题

我想编写一个从timeInOut列中进行选择的查询。我希望桌子看起来像这样:


如您所见,现在有2个新列,不再有OriginType列。我仍然希望使用相关子查询和模运算符。当它是签入时,我希望它被放置在签入列中,如果它是签出,我希望它被放置在签出列中

您可以从下面的查询中获取最后一个OriginType,如果last是O,则插入'I',如果last是I,则插入该查询未返回任何行和O

SELECT OriginType from Employee where employeeId = 1 and timeInOut = (select max(timeInOut) from Employee where employeeId = 1)

您可以为此使用相关子查询和模运算符:

SELECT EmployeeID, 
    timeInOut, 
    IIF(
        (SELECT COUNT(*) 
        FROM MyTable s 
        WHERE s.EmployeeID = m.EmployeeID 
        AND s.timeInOut <= m.timeInOut
        AND s.timeInOut >= INT(m.timeInOut)) Mod 2 = 1, "I", "O") As OriginType
FROM MyTable m
此查询的工作方式如下:

子查询获取该员工在与当前行相同的日期过账的行数。然后,我们计算该计数的2的模,如果计数不能被2整除,例如第1、3、5等签入,则返回1,如果不能整除,则返回0


如果计数可以被2整除,那么它必须是签入,如果不是,则是签出。

这是另一个问题。随便问吧,尽管嗨,埃里克,我发布了一个新问题。这和这个问题很相似。如果你能看一看,我将不胜感激@我会的。您可以在当前问题中链接到此问题。