SQL按单独列选择最大年/月

SQL按单独列选择最大年/月,sql,sql-server,Sql,Sql Server,我需要按最大年/月值选择行,并进行这个相当复杂的查询。它可以工作,但它不可能是最明智的性能解决方案 Select Max(hr.HRYear) as HRYear, Max(hr.HRMonth) as HRMonth From data hr, (Select Max(HRYear) as HRYear From data) as atemp Where hr.HRYear = atemp.HRYear and hr.HRMonth = (Select Max(HRMonth) Fro

我需要按最大年/月值选择行,并进行这个相当复杂的查询。它可以工作,但它不可能是最明智的性能解决方案

Select Max(hr.HRYear) as HRYear, Max(hr.HRMonth) as HRMonth
From data hr,
  (Select Max(HRYear) as HRYear From data) as atemp
Where hr.HRYear = atemp.HRYear
  and hr.HRMonth = (Select Max(HRMonth) From data Where HRYear=atemp.HRYear)
示例行和预期结果为HRYear=2014,HRMOUNT=10个值。键值是整数

HRYear(int)  HRMonth(int)  Attr1(varchar)
2013         10            aa0
2013         11            aa3
2013         11            bb5
2013         12            aa2
2013         12            aa2
2014          7            cc1
2014          8            dd2
2014         10            ee3
2014         10            ee2
您是否更了解如何选择最大年+月组合?我需要值来运行其他查询

我已经接受了Gordon的TOP1..ORDERBY解决方案,但一个(现已删除)想法是这个查询。我有几百个测试行,所以基准测试几乎是不可能的,但是一旦我在一个产品中达到了数百万行,那么什么是最有效的测试行还有待观察

SELECT fst.HRYear, Max(fst.hrmonth) as HRMonth
FROM   data fst
       JOIN (SELECT Max(HRYear) HRYear FROM data) scd
       ON fst.HRYear = scd.HRYear
GROUP  BY fst.HRYear 

您可以使用
top
top with ties
获得您想要的:

select top 1 with ties hr.*
from data hr
order by hr.hryear desc, hr.hrmonth desc;
如果希望结果集仅包含一行,则可以使用
top 1 hr.*
。例如,如果您只想要最近的年份和月份:

select top 1 hr.hryear, hr.hrmonth
from data hr
order by hr.hryear desc, hr.hrmonth desc;

我现在觉得自己很愚蠢,当然是最简单的1.按顺序做,我刚才是怎么想的。我从来没有见过with ties关键字,但这里不需要它,所以我现在不需要对它进行更多的研究。谢谢。