2017-07-15 179 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)