TSQL-根据另一列获取MAX值

时间:2016-10-28 16:30:55

标签: sql-server-2008 tsql max

我有下表:

 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获得yr和位置的MAX等级。

预期结果:

 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语句:

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  

非常感谢任何帮助。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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