说明: 我正在研究学生考试系统,学生出现,通过或失败或缺席。
问题: 我的任务是获取他们的状态摘要。你可能会说一张结果卡,它应该打印一个主题的最后状态。
以下是学生在不同课程中多次出现的数据示例。我突出了一个学生出现过三次的主题。
现在,我编写以下Query,它提取与上图相同的结果:
SELECT DISTINCT
gr.STUDKEY,gr.SUBJECT_ID, gr.SUBJECT_DESC,gr.MARKS,
gr.PASSFAIL, gr.GRADE,max(gr.SESSION_ID), gr.LEVEL_ID
FROM RESULT gr
WHERE gr.STUDKEY = '0100106524'
GROUP BY gr.STUDKEY,gr.SUBJECT_ID, gr.SUBJECT_DESC,gr.MARKS,
gr.PASSFAIL, gr.GRADE, gr.LEVEL_ID
所需 我想只获得学生出现的主题的最后状态。
请求帮助。提前致谢。
问候
我使用的是sql-server-2008。
答案 0 :(得分:0)
希望有一个日期字段,或表示此课程中学生出场顺序的内容。使用它来按降序排序您的查询,以便最近出现的是第一个记录,然后指定“Top 1”,它将只为您提供该学生的最新记录,其中包括最近的状态。
SELECT TOP 1
gr.STUDKEY,gr.SUBJECT_ID, gr.SUBJECT_DESC,gr.MARKS,
gr.PASSFAIL, gr.GRADE,gr.SESSION_ID, gr.LEVEL_ID
FROM RESULT gr
WHERE gr.STUDKEY = '0100106524'
ORDER BY gr.Date DESC //swap "Date" out for your field indicating the sequence.
如果您正在同时为同一个学生寻找多个班级,请使用MAX by(日期)分组。
答案 1 :(得分:0)
这不会起作用,因为您在选择组中包含了gr.MARKS和gr.GRADE等字段,这意味着查询可能会为每个会话ID返回多于1条记录,而其等级或标记是不同的。
SELECT
gr.STUDKEY,gr.SUBJECT_ID, gr.SUBJECT_DESC,
gr.PASSFAIL, gr.GRADE,gr.SESSION_ID, gr.LEVEL_ID
FROM RESULT gr
JOIN (SELECT MAX(SessionId) as sessionId, STUDKEY
FROM RESULT
GROUP BY STUDKEY ) gr1 ON gr1.sessionId=gr.sessionid AND gr1.STUDKEY =gr.STUDKEY