使用多个分组过滤记录并保留列

时间:2017-07-15 02:46:07

标签: sql oracle

我有以下表数据

enter image description here

正如您所看到的,给定学生一年内有多个记录和多个学校。我需要采取的结果是根据以下标准过滤学生

  • 如果学生在同一年内有多所学校,请参加具有最新入学日期的记录
  • 如果学生一年只有一条记录,请参加最新的注册记录

最后我每个学生只有一条记录。 所以在那之后我应该只有下面突出显示的数据,

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

2 个答案:

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

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