我有一个返回数据集的查询,其中包含UserID,CourseID,课程完成日期,课程注册日期和状态(成功,未尝试,未完成)。
然而,允许人们多次上课。
对于1个报告,我需要根据以下规则获得一个唯一的记录集(基于Combined UserID和CourseID ):
我知道如何创建仅返回唯一(Distinct)值的查询,但不知道如何使用一组规则来执行此操作。
答案 0 :(得分:0)
我看到这有点老了。我不知道这是否直接回答了您的问题,因为我无法想出一种方法来编写单个查询来执行此操作。然而,我确实想出了一个我自己测试的解决方案。
使用3个表格和4个查询,我认为我已经制作了您正在寻找的结果。
我写的第一个问题是获得" First Completed"日期。因为一个人只完成一次课程,这是他们的第一次完成,这实际上意味着你的标准1和2是相同的。
我是通过对UserID和CourseID进行分组然后获取StatusCompleteionDate的MIN,其中Status等于1来实现此目的。
SELECT tblRegistrations.UserID, tblRegistrations.CourseID, Min(tblRegistrations.CourseCompletionDate) AS FirstCompleted
FROM tblRegistrations
WHERE ((tblRegistrations.StatusID)=1)
GROUP BY tblRegistrations.UserID, tblRegistrations.CourseID;
我写的第二个问题是获得"最后未完成"注册日期。我再次对UserID和CourseID进行了分组,但是这次我使用了CourseRegistrationDate的最大MAX来获取最后一次尝试这个课程而没有完成(状态等于3)
SELECT tblRegistrations.UserID, tblRegistrations.CourseID, Max(tblRegistrations.CourseRegistrationDate) AS LastAttempt
FROM tblRegistrations
WHERE (((tblRegistrations.StatusID)=3))
GROUP BY tblRegistrations.UserID, tblRegistrations.CourseID;
我写的第三个查询是获取唯一的UserID / CourseID关系,并简单地将它们分组。
SELECT tblRegistrations.CourseID, tblRegistrations.UserID
FROM tblRegistrations
GROUP BY tblRegistrations.CourseID, tblRegistrations.UserID;
最后,我编写了结果查询,确保提取每个UserID / CourseID组合,然后显示它是否已完成,以及请求的日期。
SELECT qryUserCourses.UserID, qryUserCourses.CourseID, Nz([FirstCompleted],[LastAttempt]) AS ResultDate, IIf([FirstCompleted],"Completed","Not Completed") AS Result
FROM (qryUserCourses
LEFT JOIN qryFirstCompleted ON (qryUserCourses.CourseID = qryFirstCompleted.CourseID) AND (qryUserCourses.UserID = qryFirstCompleted.UserID))
LEFT JOIN qryLastNotCompleted ON (qryUserCourses.CourseID = qryLastNotCompleted.CourseID) AND (qryUserCourses.UserID = qryLastNotCompleted.UserID);
这为我生成了一个UserID,CourseID,日期和完成状态列表。