2015-09-02 2 views
0

Salam, (Приветствия) всем.sql-server-2008: получить последний статус предметов студента

Вступление: Я работаю над системой студенческих экзаменов, где учащиеся появляются и проходят или проваливаются или отсутствуют.

Задача: Мне поручено получить их резюме статуса. вы можете сказать Карту результатов, которая должна напечатать свой последний статус Субъекта.

Ниже приведен образец данных, в которых учащийся много раз выступал в разных сеансах. Я выделил один предмет, в котором студент появился три раза.

enter image description here

Теперь я пишу следующий запрос, который извлечь тот же результат, как на картинке выше:

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

Почему SELECT DISTINCT? – jarlh

+1

Есть ли поле даты или поле даты? закажите по дате в порядке убывания и укажите «ТОП 1», – Gene

ответ

0

Это не сработает, потому что вы включаете в группу такие поля, как gr.MARKS и gr.GRADE, и в выборе, что означает, что запрос может возвращать более 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 
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 (Дата), если вы ищете для нескольких классов с таким же студентом, в то же время.

Смежные вопросы