Выберите последний результат теста для каждого студента по каждому предмету, который они приняли - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь получить все последние результаты тестов в таблице TestScores для каждого предмета, в котором учился студент. Пример ниже.

STUDENT_ID   SUBJECT   SCORE   TEST_DATE 
1            math      90%     11/5/2018
1            math      88%     1/12/2019
1            science   74%     12/9/2018
2            math      79%     10/10/2018
2            science   68%     2/25/2019 
1            science   72%     6/14/2018
2            art       93%     9/22/2018
3            art       73%     10/20/2018



Desired output:

STUDENT_ID   SUBJECT   SCORE   TEST_DATE 
1            math      88%     1/12/2019
1            science   74%     12/9/2018
2            math      79%     10/10/2018    
2            science   68%     2/25/2019 
2            art       93%     9/22/2018
3            art       73%     10/20/2018

Ответы [ 2 ]

0 голосов
/ 20 марта 2019

При этом:

select student_id, subject, max(test_date) maxdate
from tablename 
group by student_id, subject

Вы получаете все последние даты для каждого студента и предмета,
поэтому вы присоединяете его к таблице и получаете желаемые результаты:

select t.* 
from tablename t inner join (
  select student_id, subject, max(test_date) maxdate
  from tablename 
  group by student_id, subject
) g
on g.student_id = t.student_id and g.subject = t.subject and g.maxdate = t.test_date
0 голосов
/ 20 марта 2019

Вы можете использовать для этого ROW_NUMBER .

select STUDENT_ID
    , SUBJECT
    , SCORE
    , TEST_DATE
from
(
    select STUDENT_ID
        , SUBJECT
        , SCORE
        , TEST_DATE
        , RowNum = ROW_NUMBER()over(partition by STUDENT_ID, SUBJECT order by TEST_DATE DESC)
    from TestScores
) x
where x.RowNum = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...