Sql server 为每个学生选择他们所学科目的最新考试分数

Sql server 为每个学生选择他们所学科目的最新考试分数,sql-server,Sql Server,我试着从表格中抽取所有最新的考试成绩,每个学生所学的科目的考试成绩。下面的例子 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

我试着从表格中抽取所有最新的考试成绩,每个学生所学的科目的考试成绩。下面的例子

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
你可以利用这一点

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
为此:

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

完美的正是我需要的。谢谢,肖恩。