2016-10-28 22 views
0

私は以下の表を持っているに応じて、MAX値を取得します。TSQL-は別の列

yr location entry_date student grade 
----|--------|----------|-------|----- 
2014| A |2013-12-12| Tom | 8th 
2015| B |2014-11-11| Tom | 9th 
2016| B |2015-09-07| Tom | 10th 
2016| B |2016-10-20| Tom | 11th 

私はENTRY_DATEに基づいて年と場所のためのMAX等級を取得する必要があります。

期待される結果:私は、次のselect文を試してみました

yr location entry_date student grade 
-----|--------|----------|-------|----- 
2014 | A |2013-12-11| Tom | 8th 
2015 | B |2014-11-11| Tom | 9th 
2016 | B |2016-10-20| Tom | 11th 

SELECT distinct max_yr.yr, 
       location, 
       max_date.entry_date, 
       u.student, 
       grade 
      from user_table u 
inner join (SELECT student, 
       max(entry_date) as entry_date 
       from user_table 
       group by student) max_date on 
       u.student = max_date.student 
       and u.entry_date = max_date.entry_date 
inner join (SELECT student, 
       max(yr) as yr 
       from user_table 
       group by student) max_yr 
       on u.student=max_yr.student 
       and u.yr = max_yr.yr 

この文は1つのだけのレコードを返します。すべてのヘルプは大歓迎されます

yr location entry_date student grade 
    -----|---------|-----------|--------|------ 
    2016 | B |2016-10-20 | Tom | 11th 

+0

両方の行の同じグレード – Paparazzi

答えて

0
Select Yr 
     ,location 
     ,entry_date = max(entry_date) 
     ,Student 
     ,Grade  = max(Grade) 
From YourTable A 
Group By Yr,Location,Student 

戻り

enter image description here

+0

恐ろしい本当の悪い例です!どうもありがとうございます。 – user1308665

0
select * from 
(select *, row_number() over (partition by yr order by date desc) as rn 
    from table 
) tt 
where rn = 1