我需要按最大YEAR/MONTH值选择行,并进行相当复杂的查询.它有效,但它不是最性能的解决方案吗?
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)
Run Code Online (Sandbox Code Playgroud)
示例行和预期结果是HRYear = 2014,HRMonth = 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
Run Code Online (Sandbox Code Playgroud)
您是否更好地了解如何选择最大年份+月份组合?我需要值来运行其他查询.
我已经接受了 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
Run Code Online (Sandbox Code Playgroud)
您可以使用top或top with ties获得您想要的东西:
select top 1 with ties hr.*
from data hr
order by hr.hryear desc, hr.hrmonth desc;
Run Code Online (Sandbox Code Playgroud)
你可以使用top 1 hr.*,如果你想要的结果设置为只由一排.例如,如果您只想要最近的年份和月份:
select top 1 hr.hryear, hr.hrmonth
from data hr
order by hr.hryear desc, hr.hrmonth desc;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4894 次 |
| 最近记录: |