MS Access查询多个组和标准最大-N每组

时间:2016-02-04 21:02:01

标签: sql ms-access greatest-n-per-group

好的伙计们,我对这件事感到极限。我有一个查询,指的是一个单独的实际考勤表查询(qryEventDates)和一个预定的考勤表(出勤时间表)。到目前为止,该查询一直有效,直到学生(EventID)具有多个计划(计划生效日期)。我输入了一个标准,将输出限制为< =到出勤日期(EventDate)的时间表,但是一旦学生有多个时间表,它就会显示旧时间表和新时间表。 (见图像链接)。

Query Result

我基本上试图让它只显示每个学生当天应该活动的出勤时间表。我尝试了很多查询(热门查询等)和其他方法,但这是我迄今为止最接近的。请参阅下面的MS Access SQL查询:

SELECT q.EventID, q.EventDate, s.[Schedule Effective Date], s.SunOC, s.SunDE, s.MonOC, s.MonDE, s.TueOC, s.TueDE, s.WedOC, s.WedDE, s.ThuOC, s.ThuDE, s.FriOC, s.FriDE, s.SatOC, s.SatDE FROM [Attendance Schedule] AS s RIGHT JOIN qryEventDates AS q ON s.Schedule_FK_Student_ID = q.EventID WHERE (((s.[Schedule Effective Date])<=[EventDate])) ORDER BY q.EventID, q.EventDate;

如果需要,我愿意改变设置......这是我尝试解决的最后一件事。请放轻松我,我是自学成才,我主要知道Access作为最终用户,而不是数据库程序员。

如果需要更多信息,请与我们联系。任何帮助表示赞赏。非常感谢你。

2 个答案:

答案 0 :(得分:0)

EventID是StudentID吗? [计划生效日期]和[活动日期]之间有什么区别? 我建议用文字解释你想要解决的问题......也许不同的数据库设计会有所帮助。

答案 1 :(得分:0)

我正在进行推理,但这样的事情会有所帮助:

SELECT q.StudentID, q.EventDate, s.[Schedule Effective Date]
FROM qryEventDates AS q INNER JOIN [Attendance Schedule] AS s 
ON q.StudentID = s.Student_ID
WHERE (((s.[Schedule Effective Date])=
(SELECT MAX([Schedule Effective Date]) FROM [Attendance Schedule] A 
WHERE A.[Student_ID]=s.[Student_ID] AND A.[Schedule Effective Date] <= [EventDate])))
ORDER BY q.EventDate

第一个月的结果:

StudentID   EventDate   Schedule Effective Date
ST-AAR0000  2016-01-19  2016-01-19
ST-AAR0000  2016-01-20  2016-01-19
ST-AAR0000  2016-01-21  2016-01-19
ST-AAR0000  2016-01-22  2016-01-19
ST-AAR0000  2016-01-23  2016-01-19
ST-AAR0000  2016-01-24  2016-01-19
ST-AAR0000  2016-01-25  2016-01-19
ST-AAR0000  2016-01-26  2016-01-19
ST-AAR0000  2016-01-27  2016-01-19
ST-AAR0000  2016-01-28  2016-01-28
ST-AAR0000  2016-01-29  2016-01-28
ST-AAR0000  2016-01-30  2016-01-28
ST-AAR0000  2016-01-31  2016-01-28