我的数据库中有两个表:
活动:
学生:
我有一个查询'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
任何人都知道正确的查询?
答案 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