在表中查找多个实例

时间:2015-03-25 20:41:38

标签: sql ms-access rdbms

我的数据库中有两个表:

活动:

enter image description here

学生:

enter image description here

我有一个查询'Events'表的SQL查询,以便在学生进入(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

任何人都知道正确的查询?

2 个答案:

答案 0 :(得分:1)

根据您的示例查询,显示 Event_Date_Time 是日期/时间数据类型。因此,我建议您使用TimeValue()将时间组件检查为日期/时间类型,而不是将它们转换为带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

如果您还想查看学生表中的姓名或其他信息,请将GROUP BY查询加入 RFID <学生 < / em>的

答案 1 :(得分:0)

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