在 table 中查找多个实例

Finding multiple instances in a table

我的数据库中有两个 table:

事件:

学生:

我有一个 SQL 查询,它查询 'Events' table 以显示学生何时进来(其中 In_Or_Out = 'In')一周内晚于 08:40:

SELECT RFID,Event_Date_Time
FROM Events
WHERE Events.Event_Date_Time BETWEEN #3/24/2015# And #3/17/2015# AND Events.In_Or_Out='In' AND Format(Event_Date_Time,'HH:MM')>#8:40:00# 

现在我想知道一个学生是否在一周内迟到两次或更多次。我尝试了以下 SQL 查询,但它不起作用:

SELECT *
FROM Events
WHERE Events.Event_Date_Time BETWEEN #3/24/2015# And #3/17/2015# AND Events.In_Or_Out='In' AND Format(Event_Date_Time,'HH:MM')>#8:40:00#
GROUP BY RFID
HAVING COUNT(RFID)>1

有人知道正确的查询吗?

SELECT e.RFID, s.FORENAME, s.SURENAME, count(e.*) AS LATE, 
FROM Events e
INNER JOIN students s
on s.RFID = e.RFID
WHERE e.Event_Date_Time BETWEEN '3/24/2015' And '3/17/2015' 
    AND e.In_Or_Out='In' 
    AND time(e.Event_Date_Time)>'8:40:00'
GROUP BY e.RFID, s.FORENAME, s.SURENAME
HAVING COUNT(e.*)>1

根据您的示例查询,Event_Date_Time 似乎是 Date/Time 数据类型。所以我建议您使用 TimeValue() 将时间组件检查为 Date/Time 类型,而不是使用 Format().

将它们转换为字符串
SELECT Events.RFID, Count(*)
FROM Events
WHERE
        Events.Event_Date_Time BETWEEN #3/17/2015# And #3/24/2015#
    AND Events.In_Or_Out='In'
    AND TimeValue(Events.Event_Date_Time) > #08:40:00#
GROUP BY Events.RFID
HAVING COUNT(*) > 1

如果您还想查看您的 学生 table 的姓名或其他信息,请加入 GROUP BY 查询返回 RFID.

上的学生