sql-server-2008:获取学生主题的最后状态

时间:2015-09-02 11:54:03

标签: sql database sql-server-2008

萨拉姆,(问候)给所有人。

说明: 我正在研究学生考试系统,学生出现,通过或失败或缺席。

问题: 我的任务是获取他们的状态摘要。你可能会说一张结果卡,它应该打印一个主题的最后状态。

以下是学生在不同课程中多次出现的数据示例。我突出了一个学生出现过三次的主题。

enter image description here

现在,我编写以下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。

2 个答案:

答案 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