2017-07-15 107 views
0

我有如下表数据筛选记录

​​

正如你可以为一个给定的学生看到有在一年多的学校多条记录。我需要的结果是根据下列标准

  • 如果学生在同一年多所学校滤波器学生采取具有最新的入学日期
  • 如果学生只有一个创纪录的一年记录,取最新的招生记录

最后我只会有一个记录每个学生。 所以之后,我应该只有数据,如下面突出,

enter image description here

我已经尝试了许多团体得到这个,问题是,它会忽略某些列。但我需要把这里列出的所有列。

select max(val.sc_year) as lyear, max(val.enroll_date) as ldate,val.stident_id,val.student_name,val.school 
from table val group by val.stident_id,val.student_name,val.school 
+0

查询是否给出了一些错误? – jophab

+1

你需要做出决定。用话来说,你说你想为每个学生**和年**得到最近的一行,但是后来(在这个例子中)你只为每个学生选择一行。你根本不在乎一年。那它是哪一个? – mathguy

+0

不同的学生应根据最新的入学日期进行考试。 –

回答

1

你想要得到的最每个学生和每年的最近一排。下面的查询将帮助你。

SELECT * FROM 
(
    SELECT StusdentId, EnrolmentDate, Row_Number() OVER(PARTITION BY StusdentId ORDER By EnrolmentDate desc) 
     AS SRNo 
     FROM [StudentTable] 
) AS B WHERE SRNo=1 
0

喜欢的东西下面应该工作,它至少会每个学生独立返回黄行,因此只有一条记录上,他多少年的研究:

select val.sc_year as lyear, val.enroll_date as ldate,val.stident_id,val.student_name,val.school 
from table val 
where 
    concat(val.enroll_date, val.student_id) in 
    (select concat(max(val.enroll_date), val.student_id) from val 
     group by val.student_id)